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)