你离开是否
获得 0 次赞
帮助过0人
,可利用STC89C52定时器T0作为每10ms加一的定时器,P3.5控制开始键,按键按下并检测弹起后,开启定时器T0,开始计数;P3.6控制暂停键,按键按下并检测弹起后,关闭定时器T0实现暂停功能;P3.7控制复位键,按键按下并检测弹起后,显示变量全部置零,实现清零功能。(1)利用单片机定时器中断和定时器计数方式实现秒、分定时。(2)通过LED显示程序的调整,熟悉LED动态显示的控制过程。(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); }