单片机系统课程设计 }
void showstr(uchar *t) { while(*t) { write_data(*t);
//向液晶读入字符串
t++;
}
}
void clear() { write_com(0x01); go(1,14);
showstr(t1); go(2,14);
shownum(waiting);
}
void init() { lcden=0;
write_com(0x38);
write_com(0x0c); write_com(0x06); write_com(0x01);
go(1,4); showstr(t0);
}
void keyscan() {
//清空屏幕 //光标定位到1行14列
//光标定位到2行15列
//设置点阵显示和数据接口
//打开显示,不显示光标
//写一个字符指针加一
//显示清零、数据指针清零30
单片机系统课程设计 uchar a; if(waiting<20) {
if(s0==0&&(s1!=0)&&(s2!=0)&&(s3!=0)) //在工作人员的操作键未按
下才能领号
{
delay(5); }
if(s1==0) {
delay(5);
if(s1==0) {
while(!s1); di();
31
if(s0==0&&(s1!=0)&&(s2!=0)&&(s3!=0)) //确认领号键被按下 { }
while(!s0); di(); clear(); num++; waiting++; go(1,0); showstr(t2); go(2,0);
//光标定位到2行1列
//光标定位到1行1列
//等待按键释放
//语音提示
shownum(num); go(2,14);
shownum(waiting);
//显示所领的号码
//显示等待的人数
//窗口1的叫号键被按下
单片机系统课程设计
}
}
if(waiting==0) { } else { }
clear(); waiting--; go(1,0); showstr(t3); go(2,0); showstr(t33); go(1,3);
//如果没人在等待
write_com(0x01); go(1,3); showstr(t5); go(2,3); showstr(t55);
shownum(num-waiting); go(2,3); shownum(1); go(2,14); shownum(waiting);
if(s2==0) {
delay(5);
if(s2==0)
//窗口2的叫号键被按下
32
单片机系统课程设计 { while(!s2); di();
//如果没人在等待
if(waiting==0) { write_com(0x01); //清屏
go(1,3);
showstr(t5);
go(2,3); showstr(t55);
} else { clear(); waiting--; go(1,0); showstr(t3); go(2,0); showstr(t33); go(1,3);
shownum(num-waiting); go(2,3); shownum(2); go(2,14); shownum(waiting); }
}
}
33
}
单片机系统课程设计 else if(waiting==20) { if(!a)
di();
//如果等待的人数达到上限
//语音提示 //领号停止键被按下
if(s3==0) { delay(5); if(s3==0) { while(!s3); di();
a=1;
write_com(0x01); go(1,0); showstr(t4);
go(2,0); showstr(t44);
}
}
if(a==1) { if(s1==0) { delay(5); if(s1==0) { while(!s1); di();
clear();
//继续叫号
34