第7章 系统程序
#include
uchar s1[]=\ uchar s2[]=\ uchar s3[]=\ uchar s4[]=\
uint num1=0; //排队叫的号码 uint rank[20]={0}; //排队叫号存储的数组 uint num2=0; //窗口消的号码 int Flag=0; //叫号的标志 int ClearFlag=0; //消号的标志
uint Length=0; //队列长度 叫一次号时+1,消一次号时-1
/*延时函数*/ void delay(uint n) {
while (n--); }
/***************************************** LCD1602 *显示屏命令写入函数*
18
*****************************************/ void write_com(uchar com) { e=0; rs=0; rw=0; P0= com; delay(1000); e=1; delay(1000); e=0; }
/***************************************** LCD1602 *显示屏数据写入函数*
*****************************************/ void write_data(uchar date) { e=0; rs=1; rw=0; P0 = date; delay(1000); e=1; delay(1000); e=0; }
/***************************************** LCD1602 *显示屏清空显示*
*****************************************/ void clear(void) {
write_com(0x01); delay(1000);
19
}
/***************************************** LCD1602 显示屏初始化函数
*****************************************/ void init(void) {
write_com(0x38); /*显示模式设置*/ delay(100); write_com(0x38); delay(100); write_com(0x38); delay(100); write_com(0x38);
write_com(0x08); /*显示关闭*/ write_com(0x01); /*显示清屏*/ write_com(0x06); /*显示光标移动设置*/ delay(100);
write_com(0x0C); /*显示开及光标设置*/ }
/*简单的蜂鸣器提示音*/ void sound() { uint a;
for(a=0;a<500;a++) { } }
/*获取键值函数*/ uint key() {
uint jianzhi;
20
sounder=0; delay(61); sounder=1;
if(key1==0) { } } }
/*****************************************
叫号机 按一次一号键变量+1,最大为20 *****************************************/ void QueueNum() {
if(Flag==1) //判断叫号标志是否有效 {
if ( Length<20) {
num1++;
rank[Length] = num1; return (jianzhi); if(key2==0||key3==0) if(key2==0) jianzhi=2; if(key3==0) jianzhi=3; ClearFlag=1; { delay(1000);
delay(1000); if(key1==0) jianzhi=1; Flag=1;
} Length++; } }
/*****************************************
21
窗口消号处理函数
*****************************************/ void ClearNum() { uint i;
if (ClearFlag==1) //判断消号标志是否有效 {
num2=rank[0]; //把消的号赋给全局变量num
for(i=0;i<19;i++) //让数组整体左移一个存储单元,即把消得号删除 {
rank[i]=rank[i+1]; } Length--; } }
/***************************************** 检测到按键后,检测函数处理及LCD显示处理 *****************************************/ void CheckButton(uint m) //m代表检测到的键值 { uint jz,i; jz=m;
if((jz==1) && (Flag==1)) {
// 当队列人数达到20时,提示 // Queue is full
if( Length>=20 ) { clear();
write_com(0x80+0x02);
delay(100); for(i=0;i<16;i++) {
22