⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602.c

📁 1602液晶的编写程序
💻 C
字号:
#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};uchar code table1[]="  :  :  ";uchar code table2[]="    /  /  ";int i,a,shi,fen,miao,year,month,day,r1,r2,k,num,temp;sbit rs=P2^4;sbit rw=P2^5;sbit e=P2^6;void delay(uint z){    uint x,y;    for (x=z;x>0;x--)        for (y=125;y>0;y--);}void write_com(uchar com){    rs=0;    rw=0;    P0=com;    delay(5);    e=1;    delay(5);    e=0;}void write_date(uchar date){    rs=1;    rw=0;    P0=date;    delay(5);    e=1;    delay(5);    e=0;}void unit(){    TMOD=0x01;    TH0=(65535-50000)/256;    TL0=(65535-50000)%256;    EA=1;    ET0=1;    TR0=1;    shi=23;    fen=59;    miao=57;    year=2009;    month=12;    day=31;    k=0;    write_com(0x3f);//功能设置    write_com(0x01);//清屏    write_com(0x0c);//显示开关控制    write_com(0x06);//输入方式    write_com(0x80+0x40+4);//指针    for (i=0;i<8;i++)    {        write_date(table1[i]);    }    write_com(0x80+3);    for (i=0;i<10;i++)    {        write_date(table2[i]);    }}/*判定一个月有30天还是31天*/void ye(){    switch (month)    {    case 1:    case 3:    case 5:    case 7:    case 8:    case 10:    case 12:r1++;break;    case 2:    case 4:    case 6:    case 9:    case 11:r2++;break;    }    if (r1==1)    {        r1=0;        if (day==31)        {            day=1;            if (month<11)                month++;        }        else            day++;    }    if (r2==1)    {        r2=0;        if (day==30)        {            day=1;            if (month==12)            {                month=1;                year++;            }            else                month++;        }        else            day++;    }}void write_add_date(uchar add,uchar date){    write_com(0x80+add);    write_date(date);}void write_com_com(uchar add,uchar com){    write_com(0x80+add);    write_com(com);}/*显示函数*/void display(){    write_add_date(0x40+4,table[shi/10]);    delay(5);    write_add_date(0x40+5,table[shi%10]);    delay(5);    write_add_date(0x40+7,table[fen/10]);    delay(5);    write_add_date(0x40+8,table[fen%10]);    delay(5);    write_add_date(0x40+10,table[miao/10]);    delay(5);    write_add_date(0x40+11,table[miao%10]);    delay(5);    write_add_date(3,table[year/1000]);    delay(5);    write_add_date(4,table[year%1000/100]);    delay(5);    write_add_date(5,table[year%1000%100/10]);    delay(5);    write_add_date(6,table[year%10]);    delay(5);    write_add_date(8,table[month/10]);    delay(5);    write_add_date(9,table[month%10]);    delay(5);    write_add_date(11,table[day/10]);    delay(5);    write_add_date(12,table[day%10]);}void timer() interrupt 1{    TH0=(65535-50000)/256;    TL0=(65535-50000)%256;    a++;    if (a==20)    {        a=0;        if (miao==59)        {            miao=0;            if (fen==59)            {                fen=0;                if (shi==23)                {                    shi=0;                    ye();                }                else                    shi++;            }            else                fen++;        }        else            miao++;    }}/*用键盘控制光标位置*/key2(){    if (k==1)    {        write_com_com(0x40+11,0x0d);        if (num!=20)                      /*num若等于20,则证明无键按下*/        {             miao=((miao/10)*10+num);      /*将键盘值读入显示函数中,若没有这步,输入的键盘值将不被保存*/        }    }    if (k==2)    {        write_com_com(0x40+10,0x0d);        if (num!=20)        {            if (num>5)            {                miao=0;                fen=0;                shi=0;            }            else                miao=((miao%10)+(num*10));        }    }    if (k==3)    {        write_com_com(0x40+8,0x0d);        if (num!=20)        {            fen=((fen/10)*10+num);        }    }    if (k==4)    {        write_com_com(0x40+7,0x0d);        if (num!=20)        {            if (num>5)            {                miao=0;                fen=0;                shi=0;            }            else                fen=((fen%10)+(num*10));        }    }    if (k==5)    {        write_com_com(0x40+5,0x0d);        if (num!=20)        {            shi=((shi/10)*10+num);        }    }    if (k==6)    {        write_com_com(0x40+4,0x0d);        if (num!=20)        {            if (num>2)            {                miao=0;                fen=0;                shi=0;            }            else                shi=((shi%10)+num*10);        }    }    if (k==7)    {        write_com_com(12,0x0d);        if (num!=20)        {            day=((day/10)*10+num);        }    }    if (k==8)    {        write_com_com(11,0x0d);        if (num!=20)        {            if (num>2)            {                year=0;                month=0;                day=0;            }            else                day=((day%10)+num*10);        }    }    if (k==9)    {        write_com_com(9,0x0d);        if (num!=20)        {            month=((month/10)*10+num);        }    }    if (k==10)    {        write_com_com(8,0x0d);        if (num!=20)        {            if (num>1)            {                year=0;                month=0;                day=0;            }            month=((month%10)+num*10);        }    }	if (k==11)	{		write_com_com(6,0x0d);		if (num!=20)		{			year=(((year/10)*10)+num);		}	}	if (k==12)	{		write_com_com(5,0x0d);		if (num!=20)		{			year=((year/100)*100+(num*10)+(year%10));		}	}	if (k==13)	{		write_com_com(4,0x0d);		if (num!=20)		{            year=(((year/1000)*1000)+num*100+(year%100));		}	}	if (k==14)	{		write_com_com(3,0x0d);		if (num!=20)		{            year=num*1000+(year%1000);		}	}	if(k==15)	{		TR0=1;		k=0;	}	}/*键盘扫描函数*/key3(){	P3=0x7f;	temp=P3;	temp=temp&0x0f;	num=20;             /*num值要重新赋值*/	while(temp!=0x0f)	{		delay(5);		temp=P3;		temp=temp&0x0f;		while(temp!=0x0f)		{			temp=P3;			switch(temp)			{				case 0x7e:  write_date(0x30);num=0;break;				case 0x7d:  write_date(0x31);num=1;break;				case 0x7b:  write_date(0x32);num=2;break;				case 0x77:  write_date(0x33);num=3;break;			}			while(temp!=0x0f)			{				temp=P3;				temp=temp&0x0f;			}		}	}	P3=0xbf;	temp=P3;	temp=temp&0x0f;	while(temp!=0x0f)	{		delay(5);		temp=P3;		temp=temp&0x0f;		while(temp!=0x0f)		{			temp=P3;			switch(temp)			{				case 0xbe: write_date(0x34);num=4;break;				case 0xbd: write_date(0x35);num=5;break;				case 0xbb: write_date(0x36);num=6;break;				case 0xb7: write_date(0x37);num=7;break;			}			while(temp!=0x0f)			{				temp=P3;				temp=temp&0x0f;			}		}	}	P3=0xdf;	temp=P3;	temp=temp&0x0f;	while(temp!=0x0f)	{		delay(5);		temp=P3;		temp=temp&0x0f;		while(temp!=0x0f)		{			temp=P3;			switch(temp)			{				case 0xde: write_date(0x38);num=8;break;				case 0xdd: write_date(0x39);num=9;break;				case 0xdb: TR0=0;k++;break;			}			while(temp!=0x0f)			{				temp=P3;				temp=temp&0x0f;			}		}	}	return(num);	} main(){    unit();    while (1)    {	    if(k==0)		{			display();		}		key3();		key2(); 			     }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -