用51控制的1602液晶的时钟程序,接口:1PIN--GND 2PIN--VCC 3PIN--VO 4PIN--RS 5PIN--RW 6PIN--E 7-14PIN--DB0-DB7 15PIN--A 16PIN--K
欢迎和我讨论!
#include "AT89X51.H"
#define Ddata P2
sbit RS="P0"^5;
sbit RW="P0"^6;
sbit LCDE="P0"^7;
//1PIN--GND 2PIN--VCC 3PIN--VO 4PIN--RS 5PIN--RW 6PIN--E 7-14PIN--DB0-DB7 15PIN--A 16PIN--K
unsigned char hour="12",min=0,sec=0;
unsigned int count="0";
unsigned char line1[16]={"
www.gliet.edu.cn"};
unsigned char line2[16]={"Gui Lin 12:00:00"};
unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'};
void delay5ms()
{unsigned int i;
for (i=0;i<1000;i++);
}
void delay50us()
{register int i;
for (i=0;i<20;i++);
}
void delay()
{unsigned char m,n;
for(m=255;m>0;m--)
for(n=255;n>0;n--);}
wr_com(unsigned char comm)//********写控制字符程序 E="1" RS="0" RW="0"**********//
{
LCDE=0;
RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
LCDE=1;
Ddata=comm;
RS=0;
RW=0;
LCDE=0;
}
wr_data(unsigned char dat)//*****当前位置写字符子程序:E=1 RS="1" RW="0"
{
LCDE=0;
RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
RS=1;
RW=0;
LCDE=1;
Ddata=dat;
LCDE=0;
RS=0;
RW=0;
}
unsigned char busycheck()//*****忙状态检查*******//
{
unsigned char i;
LCDE=0;
RS=0;
RW=0;
RS=0;
RW=1;
LCDE=1;
i=Ddata;
LCDE=0;
return(i);
}
void init()//**********初始化程序,必须按照产品的资料介绍的过程进行********//
{
wr_com(0x38); //*****显示模式设置必须三次,不用检测忙信号
delay5ms();
wr_com(0x38);
delay5ms();
wr_com(0x38);
delay5ms();
wr_com(0x01); ///***清屏****
delay5ms();
busycheck();
delay5ms();
wr_com(0x06); ///****光标移动设置***
delay5ms();
busycheck();
delay50us();
wr_com(0x38); ////***显示模式设置****
delay50us();
busycheck();
delay50us();
wr_com(0x0c); /////***显示开***
delay50us();
busycheck();
delay50us();
wr_com(0x40); //set cgram address
delay50us();
delay50us(); //***这些延时可用可不用***//
}
void display()
{ unsigned char i;
wr_com(0x80); //set ram address
delay50us();
busycheck();
delay50us();
for(i=0;i<16;i++)
{wr_data(line1); //display
delay50us();
busycheck();}
busycheck();
delay50us();
wr_com(0xc0);
delay50us();
busycheck();
delay50us();
for(i=0;i<16;i++)
{
wr_data(line2); //display
delay50us();
busycheck();
}
}
void main()
{
TMOD=0X01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-4995)/256;
TL0=(65536-4995)%256;
init();
while(1)
{line2[15]=tab[sec%10];line2[14]=tab[sec/10];
line2[12]=tab[min%10];line2[11]=tab[min/10];
line2[9]=tab[hour%10];line2[8]=tab[hour/10];
if(!P1_2){delay();if(!P1_2){delay();sec++;if(sec==60){sec=0;}}}
if(!P1_1){delay();if(!P1_1){delay();min++;if(min==60){min=0;}}}
if(!P1_0){delay();if(!P1_0){delay();hour++;if(hour==24){hour=0;}}}
display();
}
}
void t0(void)interrupt 1 using 0
{
TH0=(65536-4995)/256;
TL0=(65536-4995)%256;
count++;
if(count==200){count=0;sec++;}
if(sec==60){sec=0;min++;}
if(min==60){min=0;hour++;}
if(hour==24){hour=0;}
}
文章评论(0条评论)
登录后参与讨论