×
单片机 > 单片机程序设计 > 详情

51单片机-1602液晶显示的时钟代码

发布时间:2020-06-18 发布时间:
|

基本功能:时钟显示,利用按键调时,分

#include  

#define uint unsigned int  

#define uchar unsigned char  

sbit en=P3^4;  

sbit rs=P3^5;  

sbit rw=P3^6;  

sbit s2=P3^0;  

sbit s3=P3^1;  

sbit s4=P3^2;  

sbit s5=P3^3;  

uchar shi,fen,miao,num,num1=0,num2=0,num3=0,flag;  

void delay(uint z)  

{  

    uint x,y;  

    for(x=z;x>0;x--)  

        for(y=110;y>0;y--);  

}  

void busy()  

{  

    uchar busy;  

    P0=0xff;  

    rs=0;  

    rw=1;  

    do  

    {  

        en=1;  

        busy=P0;  

        en=0;  

  

    }while(busy & 0x80);//取最高位  

  

}  

void write_com(uchar com)  

{  

    busy();  

    rs=0;  

    rw=0;  

    P0=com;  

    en=1;  

    en=0;  

}  

void write_date(uchar date)  

{  

    busy();  

    rs=1;  

    rw=0;  

    P0=date;  

    en=1;  

    en=0;  

}  

void display(uchar num,weizhi)  

{  

    uchar shi,ge;  

    shi=num/10;  

    ge=num%10;  

    write_com(0x80+0x03+weizhi);  

    write_date(0x30+shi);  

    write_date(0x30+ge);  

}  

void init()  

{  

    write_com(0x38);  

    write_com(0x0c);  

    write_com(0x06);  

    write_com(0x01);//清屏  

    write_com(0x80|0x07);  

    write_date(':');  

    write_com(0x80|0x0a);  

    write_date(':');  

    display(0,2);  

    display(0,5);  

    display(0,8);  

    TMOD=0x01;  

    TH0=(65536-45872)/256;  

    TL0=(65536-45872)%256;  

    EA=1;  

    ET0=1;  

    TR0=0;    

}  

void keyscan()  

{  

    if(s5==0)  

    {  

        delay(10);  

        if(s5==0)  

        {  

            while(!s5);  

            TR0=~TR0;  

        }  

    }  

    if(s3==0)  

    {  

        delay(10);  

        if(s3==0)  

        {  

            num2++;  

            if(num2==60)  

                num2=0;  

                display(num2,5);  

                while(!s3);   

        }                

    }  

    if(s2==0)  

    {  

        delay(10);  

        if(s2==0)  

        {  

        num3++;  

        if(num3==24)  

            num3=0;  

            display(num3,2);  

            while(!s2);  

        }  

    }  

}    

void main()  

{  

    init();  

    while(1)  

    {  

        keyscan();  

    }  

}  

void time0() interrupt 1  

{  

    TH0=(65536-45872)/256;  

    TL0=(65536-45872)%256;  

    num++;  

    if(num==20)  

    {  

        num=0;  

        num1++;  

    }  

    display(num1,8);  

    if(num1==60)  

        {  

            num1=0;  

            num2++;  

            if(num2==60)  

            {  

                num2=0;  

                num3++;  

                if(num3==24)  

                {  

                    num3=0;  

                }  

                    display(num3,2);  

            }  

                display(num2,5);  

        }  

}  



关键字:51单片机  1602液晶  时钟代码

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C8051F020的UART