C51/STC12系列单片机 LCD1602液晶显示屏的驱动程序源码 实现显示字母与数字与特殊符号
#include "STC12C5A60S2.h" //根据单片机系列改头文件 晶振频率:12Mhz
#include "intrins.h"
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
#define Port P2
sbit RS = P0 ^ 7;
sbit RW = P0 ^ 6;
sbit E = P0 ^ 5;
u8 *lcd1602_text = "Hello World!2023 Happy New Year!"; //显示的字符 (固定32字节)
void delay(u16 i){ //延时
while(i--);
}
bit lcd1602_busy(){ //查忙
bit ret;
RS = 0;delay(100);
RW = 1;delay(100);
E = 1;delay(100);
ret = (Port&0x80) ? 1 : 0;delay(100);
E = 0;delay(100);
return ret;
}
void lcd1602_com(u8 com){ //地址
while(lcd1602_busy());
RS = 0;delay(100);
E = 0;delay(100);
RW = 0;delay(100);
Port = com;delay(100);
E = 1;delay(100);
E = 0;delay(100);
}
void lcd1602_dat(u8 dat){ //数据
while(lcd1602_busy());
RS = 1;delay(100);
RW = 0;delay(100);
E = 0;delay(100);
Port = dat;delay(100);
E = 1;delay(100);
E = 0;delay(100);
}
void lcd1602_init(){ //初始化
lcd1602_com(0x38);delay(50);
lcd1602_com(0x38);delay(50);
lcd1602_com(0x38);delay(50);
lcd1602_com(0x0C);delay(50);
lcd1602_com(0x06);delay(50);
lcd1602_com(0x01);delay(50);
delay(600);
}
void main(){ //主函数
u8 i;
lcd1602_init();
lcd1602_com(0x80);
for(i=0;i<32;i++){
if(i == 16) lcd1602_com(0xC0);
lcd1602_dat(lcd1602_text);
}
while(1);
}
页:
[1]