正文

数码时钟设计 - 8051单片机C51语言实现2012-12-25 19:13:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/enc999/54037.html

分享到:

/**本程序由http://www.ecn999.com/ 整理自互联网,仅供学习参考 欢迎光临8051单片机学习交流频道:   http://www.ecn999.com/ **/ //数码时钟设计 #include<reg51.h>    //  包含51单片机寄存器定义的头文件 unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //control  shape unsigned char port[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char int_time ; //中断次数计数变量 unsigned char second;    //秒计数变量 unsigned char minute;    //分钟计数变量 unsigned char hour;     //小时计数变量 /////////////////////////////////////////////////////  void delay(void)      //延时函数,延时约0.6ms  {    unsigned char j;  for(j=0;j<200;j++)   ;   } /****************************************************************** 函数功能:显示秒的子程序 入口参数:s ********************************************************************/  void DisplaySecond(unsigned char s) {    P2=0xbf;        //P2.6引脚输出低电平, DS6点亮    P0=Tab[s/10];          //显示十位    delay();    P2=0x7f;       //P2.7引脚输出低电平, DS7点亮    P0=Tab[s%10];         //显示个位  delay();  P2=0xff;     //关闭所有数码管     }   /****************************************************************** 函数功能:显示分钟的子程序 入口参数:m ********************************************************************/ void DisplayMinute(unsigned char m) {      P2=0xf7;   // P2.3引脚输出低电平, DS3点亮      P0=Tab[m/10];//显示个位    delay();    P2=0xef;   // P2.4引脚输出低电平, DS4点亮    P0=Tab[m%10];    delay();    P2=0xdf;   //P2.5引脚输出低电平, DS5点亮    P0=0xbf;   //分隔符"-"的段码    delay();    P2=0xff;   //关闭所有数码管    } /****************************************************************** 函数功能:显示小时的子程序 入口参数:h ********************************************************************/ void DisplayHour(unsigned char h) {       P2=0xfe;        //P2.0引脚输出低电平, DS0点亮    P0=Tab[h/10];          //显示十位    delay();      P2=0xfd;       //P2.1引脚输出低电平, DS1点亮    P0=Tab[h%10];    //显示个位  delay();     P2=0xfb;     //P2.2引脚输出低电平, DS2点亮  P0=0xbf;     //分隔符"-"的段码  delay();    P2=0xff;     //关闭所有数码管      }  /****************************************************************** 函数功能:主函数 ********************************************************************/  void main(void)    {           TMOD=0x01;             //使用定时器T0      EA=1;                  //开中断总允许    ET0=1;                 //允许T0中断    TH0=(65536-46083)/256;  //定时器高八位赋初值    TL0=(65536-46083)%256;  //定时器低八位赋初值    TR0=1;    int_time=0;    //中断计数变量初始化    second=0;      //秒计数变量初始化    minute=0;     //分钟计数变量初始化    hour=0;       //小时计数变量初始化                  while(1)    {              DisplaySecond(second);    //调用秒显示子程序       delay();       DisplayMinute(minute);   //调用分钟显示子程序       delay();        DisplayHour(hour);           delay();                     }   } /****************************************************************** 函数功能:定时器T0的中断服务子程序 ********************************************************************/   void interserve(void ) interrupt 1 using 1  //using Time0   {        int_time++;    if(int_time==20)      {               int_time=0;    //中断计数变量清0           second++;      //秒计数变量加1    }      if(second==60)      {        second=0;    //如果秒计满60,将秒计数变量清0        minute++;    //分钟计数变量加1      }       if(minute==60)         {          minute=0;    //如果分钟计满60,将分钟计数变量清0          hour++;      //小时计数变量加1       }         if(hour==24)           {           hour=0;    //如果小时计满24,将小时计数变量清0         }      TH0=(65536-46083)/256;   //定时器重新赋初值    TL0=(65536-46083)%256;                  }   

阅读(2513) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册