分享

求程序用AT89C51单片机......用六位数码管实现数字时钟,显示时分秒,用两个按键可分别调整时...

 昵称33826880 2016-06-05
#include#define uint unsigned int#define uchar unsigned charuchar temp,aa,miao,fen,shi;sbit m=P3^0;sbit n=P3^1;uchar code table[]={ //数码管编码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void display(uchar miao,uchar fen,uchar shi);void delay(uint z);void init();void main(){  init();//初始化子程序 miao=0; shi=0; fen=0; while(1) {   display(miao,fen,shi); } }void delay(uint z){ uint x,y; for(x=z;x>0;x--)  for(y=110;y>0;y--);}void display(uchar miao,uchar fen,uchar shi)  //  显示子函数{    P0=0x00;  P0=table[miao%10];  P2=0x7f;  delay(1);   P0=0x00;  P0=table[miao/10];  P2=0xbf;  delay(1);  P0=0x00;  P0=table[fen%10];  P2=0xdf;   delay(1);    P0=0x00;  P0=table[fen/10];  P2=0xef;  delay(1);    P0=0x00;  P0=table[shi%10];  P2=0xf7;  delay(1);        P0=0x00;  P0=table[shi/10];   P2=0xfb;   delay(1);}void init()   // 初始化子函数{  temp=0; TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; //定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872 EA=1; ET0=1; TR0=1; }void timer0() interrupt 1 //定时计数器中断{ TH0=(65536-45872)/256; TL0=(65536-45872)%256;  、 aa++; if(aa==20) //中断2次位1S,秒加1      {  miao++;  aa=0;  if(miao==60)   {    fen++;  //  满60S, 分加1,秒清0    miao=0;    if(fen==60)     {      shi++; // 小时加1      fen=0;      if(shi==24) shi=0; //小时满     }   } } if(m==0)  //  调分 {  delay(2);  if(m==0)  fen++;  if(fen==60) fen=0;  delay(2);  while(!m); } if(n==0)   // 调小时 {  delay(2);  if(n==0)  shi++;  if(shi==24) shi=0;  delay(2);  while(!n); }}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多