- #include <reg51.h>
- #include <stdio.h>
- #include <string.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit RS = P2^6; // 液晶数据/指令选择端
- sbit RW = P2^5; // 读/写选择端
- sbit EN = P2^7; // 液晶使能端
- uchar code table[] = "12345678";
- void delayms(uint a)
- {
- uint x, y;
- for(x = a; x > 0; x--)
- for(y = 110; y > 0; y--);
- }
- // 写指令
- void write_com(uchar com)
- {
- RW = 0; // 写模式
- RS = 0; // 指令寄存器
- P0 = com; // 送入指令
- delayms(1); // 数据稳定
- EN = 1; // 使能高电平
- delayms(1); // 保持高电平
- EN = 0; // 使能下降沿锁存
- }
- // 写数据
- void write_data(unsigned char dat)
- {
- RW = 0; // 写模式
- RS = 1; // 数据寄存器
- P0 = dat; // 送入数据
- delayms(1);
- EN = 1;
- delayms(1);
- EN = 0;
- }
- // LCD1602初始化
- void init()
- {
- delayms(15); // 上电等待15ms以上
- write_com(0x38); // 第一次设置8位数据、2行、5×7点阵
- delayms(5);
- write_com(0x38); // 第二次
- delayms(5);
- write_com(0x38); // 第三次
- write_com(0x0c); // 开显示,不显示光标
- write_com(0x06); // 写入后地址指针自动加1
- write_com(0x01); // 清屏,数据指针归零
- delayms(2); // 清屏指令需要稍长延时
- }
- void main(void)
- {
- uchar i;
- init();
- write_com(0x80+0x00);
- for(i = 0; i < strlen(table); i++)
- {
- write_data(table[i]);
- delayms(1);
- }
- while(1);
- }
复制代码 |