文档详情

基于51单片机的电子钟C语言程序[4页]

gfy****yf
实名认证
店铺
2025-03-16
DOC
242.50KB
约5页
基于51单片机的电子钟C语言程序[4页]_第1页
1/5
基于51单片机的电子钟C语言程序[4页]_第2页
2/5
基于51单片机的电子钟C语言程序[4页]_第3页
3/5

基于51单片机的电子钟C语言程序#include#include#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/ uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,                        0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};/*定义并初始化变量*/uchar seconde=0;uchar minite=0;uchar hour=12;uchar mstcnt=0;sbit P1_0=P1^0;                 // second 调整定义sbit P1_1=P1^1;                 //minite调整定义sbit P1_2=P1^2;                 //hour调整定义/*函数声明*/void delay(uchar k );      //延时子程序void time_pro( );    //时间处理子程序void display( );       //显示子程序void keyscan( );                //键盘扫描子程序/*****************************//*延时子程序*//****************************/void delay (uchar k){uchar j;while((k--)!=0)   {    for(j=0;j<125;j++)     {;}   }}     /**************************//*时间处理子程序*//**************************/void time_pro( void){         if(seconde==60)                    //秒钟设为60进制          { seconde=0;            minite++;           if( minite==60)              //分钟设为60进制              { minite=0;                hour++;              if(hour==24)              //时钟设为24进制                 {hour=0; }              }          }    }/*****************************//* 显示子程序*//*****************************/void display(void)    {              P2=0xfe;        P0=dispcode[hour/10];                 //显示小时的十位        delay(4);        P2=0xfd;        P0=(dispcode[(hour%10)])|0X80;        //显示小时的个位        delay(4);        P2=0xfb;        P0=dispcode[minite/10];               //显示分的十位        delay(4);        P2=0xf7;        P0=(dispcode[minite%10])|0X80;        //显示分的个位        delay(4);        P2=0xef;        P0=dispcode[seconde/10];             //显示秒的十位        delay(4);        P2=0xdf;        P0=dispcode[seconde%10];             //显示秒的个位        delay(4);      }/*******************************//*键盘扫描子程序*//*******************************/void keyscan (void){     if(P1_0==0)                     //按键1秒的调整       {            delay(30);               if(P1_0==0)                   {                       seconde++;                      if(seconde==60)                        {seconde=0; }                   }       }    if(P1_1==0)                    //按键2分的调整       {             delay(30);               if(P1_1==0)                 {                    minite++;                    if(minite==60)                      {minite=0;}       }     }    if(P1_2==0)                   //按键3小时的调整       {             delay(30);               if(P1_2==0)                   {                       hour++;                    if(hour==24)                      {hour=0; }                 }       }}void timer0(void) interrupt 1 using 0     //定时器0方式1,50ms中断一次    {     TH0=0x3c;TMOD = 0x11;        mstcnt++;        if(mstcnt==20)        {            seconde++;            mstcnt=0;    //注意点。

对计数单元的清零十分的重要,本次调试中就是        }               //因为忽略了这一点,给我早成了很大的被动       }/**************************//*主函数*//**************************/void main(void){       P1=0xff;                //初始化p1口,全设为1      TMOD = 0x11; //time0为定时器,方式1TH0=0x3c;             //预置计数初值TL0=0xb0;EA=1; ET0=1; TR0=1;     while (1){            keyscan( );    //按键扫描         time_pro( ); //时间处理   display( ); //显示时间           }}。

下载提示
相关文档
正为您匹配相似的精品文档