头像-166858

你离开是否

个人成就

获得 0 次赞

帮助过0人

STC89C52秒表系统

,可利用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); }​