(3)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。
程序一直不通。。可否帮看看
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit rs=P1^0; //定义1602 数据命令端 sbit lcden=P1^2; //定义1602 LCDEN 端 sbit s1=P3^5; //开始键 sbit s2=P3^6; //暂停键 sbit s3=P3^7; //复位键 sbit cs=P1^1; uchar count,s1num; char fen,miao,hao; uchar count,s1num;void delay(uint z) //延时函数{ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);} void write_com(uchar com) //1602写命令函数 {rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_date(uchar date) { rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; } write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口 write_com(0x0c);//设置开显示,不显示光标 write_com(0x06);//写一个字符后地址指针加1 write_com(0x01);//显示清零,数据指针清零 write_com(0x80); write_com(0x80+0x40+6);//写出时间显示部分的冒号 write_date(':'); delay(5); write_com(0x80+0x40+9); write_date(':'); delay(5); write_fmh(10,hao); //显示毫秒 write_fmh(7,miao); //显示秒 write_fmh(4,fen); //显示分 TMOD=0x01; //定时器0 工作方式1 TH0=(65536-9216)/256; //定时器装初值 TL0=(65536-9216)%256; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=0;//关闭定时器 } void keyscan()//按键扫描函数 { if(s1==0) { delay(5); if(s1==0)//确认功能键被按下 { while(!s1);//确认功能键释放 TR0=1; } } if(s2==0) { delay(5); if(s2==0) { while(!s2); TR0=0; } } if(s3==0) { delay(5); if(s3==0) { while(!s3); fen=0; miao=0; hao=0; } } write_fmh(4,fen); write_fmh(7,miao); write_fmh(10,hao); } void main() { init(); while(1) { keyscan(); } } void time0() interrupt 1//定时器0中断服务程序 { TH0=(65536-9216)/256; //定时器装初值 TL0=(65536-9216)%256; hao++; if(hao==100) { hao=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) {fen=0;} //write_fmh(4,fen); } //write_fmh(7,miao); } //write_fmh(10,hao); }
新建文本文档.zip
调通了你试试