西安文理学院课程设计报告
sbit D7=P1^7;
unsigned char num=0;
unsigned char a=30,b=60,n=0,qd,hd,d; void display(); void delay1ms() {
unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++) ; }
void delay(unsigned char n) {
unsigned char i; for(i=0;i void nopp(unsigned char n) { unsigned char i; for(i=0;i bit lcd_bz() { bit result; RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; //E=1,才允许读写 nopp(4); //空操作四个机器周期,给硬件反应时间 result=(bit)(P0&0x80); //将忙碌标志电平赋给result E=0; return result; } void WriteInstruction (unsigned char dictate) { while(lcd_bz()==1); //如果忙就等待 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=1; //E置低电平 nopp(2); //空操作两个机器周期,给硬件反应时间 P0=dictate; //将数据送入P0口,即写入指令或地址 nopp(4); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平(正跳变) 第12页 西安文理学院课程设计报告 nopp(4);//空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令 } void WriteData(unsigned char y) { while(lcd_bz()==1); RS=1; //RS为高电平,RW为低电平时,可以写入数据 RW=0; E=1; //E置低电平 P0=y; //将数据送入P0口,即将数据写入液晶模块 nopp(4);//空操作四个机器周期,给硬件反应时间 E=1; //E置高电平(正跳变) nopp(4);//空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令 } void LcdInitiate(void) { delay(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x30); //显示模式设置:8位数据,16×2显示,5×7点阵, delay(5); //延时5ms WriteInstruction(0x38); delay(5); WriteInstruction(0x0c); //显示模式设置:显示开,有光标,光标闪烁 delay(5); WriteInstruction(0x06); //显示模式设置:光标右移,字符不移 delay(5); WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除 delay(5); } void Display(unsigned char string[]) { unsigned char i; i = 0; while(string[i] != '\\0') { // 显示字符 WriteData(string[i]); i++; } } /*void bark() { ring=1; delay(10); ring=0; 第13页 西安文理学院课程设计报告 } */ void answer() { ring=1; delay(500); ring=0; WriteInstruction(0x01); delay(1); Display(\ go! \ TR1=1 ; qd=1; d=a; while(1){ //TR0=1; if(!D0){n=1; break;} if(!D1){n=2; break;} if(!D2){n=3; break; } if(!D3){n=4; break; } if(!D4){n=5; break; } if(!D5){n=6; break; } if(!D6){n=7; break; } if(!D7){n=8; break;} } WriteInstruction(0x01); switch(n) { case 1:Display(\ case 2:Display(\ case 3:Display(\ case 4:Display(\ case 5:Display(\ case 6:Display(\ case 7:Display(\ case 8:Display(\ } n=0; 第14页 西安文理学院课程设计报告 //WriteInstruction(0x01); delay(5000); d=b; while(d+1) ; } void display() { unsigned char tm[3]={0x20,0,0}; unsigned char a1,b1; a1=d/10; tm[1]=a1+0x30; b1=d; tm[2]=b1+0x30; WriteInstruction(0x01); delay(1); Display(tm); } void main(void) //主函数 { TMOD=0X11; //选择定时器方式1 TH0=0X00; //给定时器赋处置 TL0=0XFF; TH1=0X3C; TL1=0XB0; EA=1; ET1=1; //开总中断 EX0=1; ET0=1; EX1=1; TR1=1; LcdInitiate(); //调用LCD初始化函数 Display(\ while(1){ if(start) { if(!(D0&D1&D2&D3&D4&D5&D6&D7)) { WriteInstruction(0x01); delay(1); Display(\ error \ ring=1; delay(500); ring=0; delay(500); 第15页 西安文理学院课程设计报告 WriteInstruction(0x01); } } else answer(); } } void Int0() interrupt 0 //中断服务程序 { WriteInstruction(0x01); Display(\ setting qd_tm\ delay(1000); WriteInstruction(0x01); d=a; display(); while(1) {if(!add) { a++; d=a; display(); delay(500); } else if(!sub) { a--;d=a; display(); delay(500);} if(!ok) break;} } void T0_timer() interrupt 1 //中断服务程序 { TH0=0X00; TL0=0XFF; ring=0; } void Int1() interrupt 2 //中断服务程序 { WriteInstruction(0x01); delay(1); Display(\ setting hd_tm\ delay(1000); WriteInstruction(0x01); d=b; display(); 第16页 西安文理学院课程设计报告 while(1) {if(!add) { b++; d=b; display(); delay(500); } else if(!sub) { b--;d=b; display(); delay(500);} if(!ok) break; } } void T1_timer() interrupt 3 //中断服务程序 { TH1=0X3C; //重装初值 TL1=0XB0; num++; if(num==20) { num=0; display(); d--; } if(d==0) { TR1=0 ; ring=1; delay(500); ring=0; } } 第17页