武汉理工大学《通信工程应用技术课程设计》报告
void LCD_write_data2(uchar dat) {
e2=0; rs2=1; P2=dat; delay(1000); e2=1;
delay(1000); e2=0; }
/***************************************** LCD1602 *显示屏清空显示*
*****************************************/ void LCD_clear(void) {
LCD_write_com(0x01); delay(1000); }
void LCD_clear2(void) {
LCD_write_com2(0x01); delay(1000); }
/***************************************** LCD1602 显示屏初始化函数
*****************************************/ void LCD_init(void) {
LCD_write_com(0x38); /*显示模式设置*/ delay(100);
LCD_write_com(0x38); delay(100);
LCD_write_com(0x38); delay(100);
LCD_write_com(0x38); //设置16x2显示,5X7点阵,8位数据接口 LCD_write_com(0x08); /*显示关闭*/
LCD_write_com(0x01); /*显示清屏,指针清零*/
LCD_write_com(0x06); /*写一个字符后地址指针自动加1*/ delay(100);
LCD_write_com(0x0C); /*显示开及不显示光标*/ }
void LCD_init2() {
LCD_write_com2(0x38); //设置16x2显示,5X7点阵,8位数据接口
25
武汉理工大学《通信工程应用技术课程设计》报告
LCD_write_com2(0x08); /*显示关闭*/
LCD_write_com2(0x01); /*显示清屏,指针清零*/
LCD_write_com2(0x06); /*写一个字符后地址指针自动加1*/ delay(100);
LCD_write_com2(0x0C); /*显示开及不显示光标*/ }
/*简单的蜂鸣器提示音*/ void sound() { uint a; for(a=0;a<500;a++) { sounder=0; delay(61); sounder=1; } }
/*获取键值函数*/ uint sweep_key() {
uint jianzhi; if(key1==0) { delay(1000); if(key1==0) jianzhi=1; RankFlag1=1; } if(key7==0) { delay(1000); if(key7==0) jianzhi=7; RankFlag=1; } if(key2==0||key3==0) { delay(1000); if(key2==0) jianzhi=2; if(key3==0) jianzhi=3; ClearNumFlag1=1; }
//非现金取号 // 1 //现金取号 //7 //非现金业务销号按键 // 2 // 3 26
武汉理工大学《通信工程应用技术课程设计》报告
if(key4==0||key5==0||key6==0) //现金业务销号按键 { delay(1000); if(key4==0) jianzhi=4; // 4 if(key5==0) jianzhi=5; // 5 if(key6==0) jianzhi=6; // 6 ClearNumFlag=1; } return (jianzhi); }
/*****************************************
取号机 按一次键变量+1,最大为20 *****************************************/ void QueueNumProcess() {
if(RankFlag1==1) //判断非现金取号标志是否有效 {
if ( LengthFlag1<20) { num_count++; //总排队人数 *(q1+LengthFlag1)= num_count; }
LengthFlag1++; }
if(RankFlag==1) //判断现金取号标志是否有效 {
if ( LengthFlag<20) { num_count++;
*(q2+LengthFlag) = num_count; }
LengthFlag++; } }
/***************************************** 窗口消号处理函数
*****************************************/ void ClearNumProcess() {
27
武汉理工大学《通信工程应用技术课程设计》报告
uint i; if (ClearNumFlag1==1) //判断消号标志是否有效 {
num1=*q1; //把消的非现金号赋给全局变量num1
for(i=0;i<20;i++) //让数组整体左移一个存储单元,即把消得号删除 { *(q1+i)=*(q1+i+1); }
LengthFlag1--; }
if (ClearNumFlag==1) //判断消号标志是否有效 {
num=*q2; //把消的号赋给全局变量num
for(i=0;i<20;i++) //让数组整体左移一个存储单元,即把消得号删除 { *(q2+i)=*(q2+i+1); }
LengthFlag--; } }
/***************************************** 检测到按键后,检测函数处理及LCD显示处理 *****************************************/
void CheckButtonProcess(uint m) //m代表检测到的键值 {
uint jz,i; jz=m;
if((jz==1) && (RankFlag1==1)) //非现金业务取号 {
// 当队列人数达到20时,提示 // Queue is full
if( LengthFlag1>=20 ) { LCD_clear2(); LCD_write_com2(0x80+0x02); delay(100); for(i=0;i<16;i++) { LCD_write_data2(prompt3[i]); delay(100); } } else
28
武汉理工大学《通信工程应用技术课程设计》报告
{ QueueNumProcess(); prompt1[11]=(num_count)/10+'0'; prompt1[12]=(num_count)+'0'; LCD_clear2(); LCD_write_com2(0x80+02); delay(100); for(i=0;i<15;i++) { LCD_write_data2(prompt1[i]); //\ delay(100); } delay(65535);delay(65535);delay(65535); LCD_write_com2(0x80+02); for(i=0;i<15;i++) { LCD_write_data2(prompt5[i]); //\ delay(100); } RankFlag1=0; } }
if((jz==7) && (RankFlag==1)) //现金业务取号 {
// 当队列人数达到20时,提示 // Queue is full
if( LengthFlag>=20 ) {
LCD_clear2();
LCD_write_com2(0x80+0x02); delay(100);
for(i=0;i<16;i++) {
LCD_write_data2(prompt3[i]); delay(100); } } else {
QueueNumProcess();
prompt1[11]=(num_count)/10+'0'; prompt1[12]=(num_count)+'0'; LCD_clear2();
29