门禁系统项目驱动程序
/***************************主程序******************************/ main(){
uchar Cnt;
bit ComFlag = 0;
CON_4053 = 1;//允许读卡
Motor1 = 1;//电机正转停止
Motor2 = 1;//电机反转停止
TimeInit();//定时器,串口初始化
LCD_Reset();//液晶屏初始化设置
LCD_All_Clear();//清全屏
DS1302_SetTime();//1302设置初始时间
AT24C64Init();//24C64初始化
while(1){
if(!TimeDisFlag){
LCD_Display1();
LCD_DisTime();
}
KeyScan();//按键扫描
KeyFunc();//按键功能分配
if(KEndFlag){//卡号接收完毕
//KEndFlag = 0;
LCD_Page_Clear(4);//清除4,5页的显示内容
LCD_Display2();
for(Cnt = 1;Cnt < 11;Cnt ++){//显示读取的卡号
if(CardNo[Cnt] >= 0x40)
LCD_Data_DisNum(32 + Cnt * 6,4,num[CardNo[Cnt]-0x40+10]);
elseLCD_Data_DisNum(32 + Cnt * 6,4,num[CardNo[Cnt]-0x30]);
}
Cnt = 0;//显示卡号后Cnt已经是11,故先清零,以便下边比较卡号时使用Cnt == 11
for(EEAddr = 0x0000;EEAddr < 0x0000 + CardMax * 0x20;EEAddr += 0x20){//读出卡号和存储器中的卡号进行比较
I2C_Read_AT24C64(EAddrH,EAddrL,12);
if(RD24C64[0] == 1){
for(Cnt = 0;Cnt < 11;Cnt ++){//11位卡号进行比较
if(CardNo[Cnt] != RD24C64[Cnt + 1])//比较过程中有不相等的就读下一内存
break;
}
}
if(Cnt == 11){//一组数据比较过程中全部相等时,显示有效并推出比较
ComFlag = 1;//比较后的卡号相同
LCD_Data_DisWord(70,6,you);//显示“有效”
LCD_Data_DisWord(82,6,xiao);
DelCount = 0;//延时100ms
while(DelCount < 20);
LCD_Page_Clear(4);//清除4,5页的显示内容
LCD_Page_Clear(6);//清除6,7页的显示内容
break;
}
}
LCD_DisTime();//若比较卡号时耗时较长,及时读取时间显示
if(!ComFlag){//比较无此卡号时显示“无效”
LCD_Data_DisWord(100,6,wu);
LCD_Data_DisWord(112,6,xiao);
DelCount = 0;
while(1){
LCD_DisTime();//读取时间显示
if(DelCount > 400){
LCD_Page_Clear(4);//清除4,5页的显示内容
LCD_Page_Clear(6);//清除6,7页的显示内容
break;
}
}
}
if(ComFlag){
LCD_Display3();
LCD_Data_DisWord(60,4,da);
LCD_Data_DisWord(72,4,kai);
Motor1 = 0;//电机正转
DelCount = 0;
while(1){//电机正转中
LCD_DisTime();//时间显示
if(DelCount > 600)
break;
}
Motor1 = 1;//电机正转停止
LCD_Data_DisWord(60,4,guan);
LCD_Data_DisWord(72,4,bi);
DelCount = 0;
while(1){//等待人过去
LCD_DisTime();//时间显示
if(DelCount > 600)
break;
}
Motor2 = 0;//电机反转
LCD_Data_DisWord(60,4,da);
LCD_Data_DisWord(72,4,kai);
DelCount = 0;
while(1){//电机反转中
LCD_DisTime();//时间显示
if(DelCount > 600)
break;
}
Motor2 = 1;//电机反转停止
DelCount = 0;
LCD_Data_DisWord(60,4,guan);
LCD_Data_DisWord(72,4,bi);
while(1){//门关上上后延时2s
LCD_DisTime();//时间显示
if(DelCount > 400)
break;
}
LCD_Page_Clear(4);
LCD_Page_Clear(6);
}
ComFlag = 0;
KEndFlag = 0;
}
}
}
void Serial() interrupt 4{//串行中断入口地址
if(RI){
CardNo[SCount] = SBUF;
RI = 0;
SCount ++;
if(SCount == 14){
KEndFlag = 1;
SCount = 0;
}
}
}
void Time0() interrupt 1{//定时器0入口地址
TH0 = 0xec;// 5ms
TL0 = 0x78;
DelCount ++;
}
门禁系统驱动程序51单片 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)