|
#include <REG51.H>
#include <shift.c>
#define unchar unsigned char
#define unint unsigned int
unchar tick;
unchar temp;
sbit clock = P3^0;//时钟信号输入 (接印字板14脚)
sbit nor = P3^1;//印字反向吹气 (接印字板NOR9脚)
sbit sen = P3^2;//光纤对照电眼
sbit rest = P3^3;//复位信号输入
sbit stop = P1^0;//异常输出信号(送给PLC控制链条停)
sbit alrom = P1^1;//报警信号输出
bit al_flag;
bit re_enable;
void al_rest() //印字链条报警复位
{
if (!rest) //复位片是不是没压下P3^3
re_enable = 1; //bit re_enable
if (re_enable == 1)
if (rest) //复位片是不是被压下
{
stop = 1;
if (!al_flag) //报警信号正常,清除复位允许标记
re_enable = 0;
}
}
/*主程序*/
void main(void)
{
P1 = 0Xff;
while (1)
{
// al_rest();//报警复位
if (clock) //判断是不是低电平
tick = 1; //记号等于1
if (tick == 1) //记号是不是等于1
if (!clock) //判断是不是变为高电平(高电平开始测试)
{
temp = P3;//把P3口的值读给temp
if (shift((temp&0x04),(temp&0x02 )))//带返回值return
{
al_flag = 0; //排出异常
}
else
{
al_flag = 1;
}
if ((!al_flag) && (rest))
{
stop = 1; //字印正常但电眼处于复位,报警 。
}
else
{
stop = al_flag; //输出报警
}
tick = 0;
} /**/
}
}
另一个文件
unchar shift(unchar sonsor, unchar blow){ blow_3 = blow_2; //吹气信号移两位 blow_2 = blow_1; //吹气信号移一位 blow_1 = blow; //吹气信号送给blow_1
a4 = a3; a3 = a2; a2 = a1; a1 = aa;/*将吹气信号移两位后检测光纤信号*/ if ((sonsor == 0x04) && (blow_3 == 0x02))//(sonsor料遮掉对照电眼输出高电平) aa = 1; //采用逻辑与的方式(成立 aa = 1开始移位) else aa = 0;
/*结果是1返回1,0则返回0*/ if (a4 == 1) //判断是不是移到48位,是的话返回1回去执行if (shift((temp&0x04),(temp&0x02 )))里面的程序 return 1; //排出异常 else return 0; //排出正常}
|
|
相关帖子
- • adc_dma进行采集时打印数据为0,不开dma数据能够正常显示,想问一下是什么原因
- • 单片机不使用外部中断,如何LED显示程序?
- • 做了个替BF7612CM的测试
- • Keil程序求助,这些报错怎么解决,小白一个,刚接触单片机
- • 求用at89c51单片机测LM331 V/F转化后的频率 我的没有显示
- • MCU模拟SPI通信,能发送数据,接收不到数据
- • 菜鸟求助
- • STM32单片机向ESP8266发送指令,设置延时1秒上传一次数据,延时不准确
- • 单片机矩阵按键 原理图+源代码
- • 通过手机蓝牙APP发出控制指令,控制3个以上LED灯亮灭和蜂鸣器报警和关闭,怎么做 求指导
|
|
|
|
|