lcd1602显示基本操作

时间:2021-03-31 19:23:06   收藏:0   阅读:34

技术分享图片技术分享图片

 

 

 

技术分享图片技术分享图片

 

 

            lcd指令码

 

地址偏移可改变数据显示的位置 (地址偏移量为16进制数如0x70)

lcd接收的数据为字符,需要其他类型数据进行转换,字符编码为8位的ASCII编码

利用串口接收数据和指令,P2口

代码如下:备注(lcd简易时钟显示)

技术分享图片

 

 

#include<reg51.h>
sbit RS = P3^0;
sbit RW = P3^1;
sbit E = P3^2;
unsigned char str[] = {"0123456789"};
unsigned char str1[] = {"beijingtimer"};
unsigned char count = 0,sec = 0,min = 0,hour = 0;
void init_timer()
{
    TMOD = 0x01;
    TH0 = (65536 - 50000)/256;
    TL0 = (65536 - 50000)%256;
    ET0 = 1;
    EA = 1;
    TR0 = 1;
}
void isr_timer() interrupt 1
{
    count++;
    if(count == 20)
    {
        sec = sec + 1;
        count = 0;
    }
    if(sec == 60)
    {
        min = min + 1;
        sec = 0;
    }
    if(min == 60)
    {
        hour = hour + 1;
        min = 0;
    }
    if(hour == 24)
    {
        
        hour = 0;
    }

}
void delay(unsigned int t)
{
    unsigned int i = 0;
    unsigned int j = 0;
    for(i = 0;i < t;i++)
    {
        
        for(j = 0;j < 120;j++)
        {
            
        }
    }
}
void writedat(unsigned char dat)
{
     RS = 1;
     RW = 0;
     E =0;
     P2 = dat;
     delay(5);
     E = 1;
     E = 0;
}
void writecom(unsigned char COM)
{
     RS = 0;
     RW = 0;
     E =0;
     P2 = COM;
     delay(5);
     E = 1;
     E = 0;
}
void display()
{
    unsigned char temp0 = 0;
    unsigned char temp1 = 0;
    unsigned char temp2 = 0;
    unsigned char temp3 = 0;
    unsigned char temp4 = 0;
    unsigned char temp5 = 0;
    unsigned char i;
    temp0 = hour/10;
    temp1 = hour%10;
    temp2 = min/10;
    temp3 = min%10;
    temp4 = sec/10;
    temp5 = sec%10;
    writecom(0x80);
    for(i = 0;i < 12;i++)
    {
        writedat(str1[i]);
    }
    delay(5);
    writecom(0x80 + 0x40 + 0x08);
    delay(5);
    writedat(str[temp0]);
    delay(5);
    writedat(str[temp1]);
    delay(5);
    writedat(:);
    delay(5);
    writedat(str[temp2]);
    delay(5);
    writedat(str[temp3]);
    delay(5);
    writedat(:);
    delay(5);
    writedat(str[temp4]);
    delay(5);
    writedat(str[temp5]);
    delay(5);


}
void init_lcd()
{
    writecom(0x38);
    writecom(0x0c);
    writecom(0x06);
    writecom(0x01);
}
int main()
{
    init_lcd();//初始化lcd
    init_timer(); //初始化定时器0
    while(1)
    {
        display();        
    }

    return 0;
}

 

原文:https://www.cnblogs.com/jiangtongxue878/p/14602265.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!