📄 lcd1602.c
字号:
#include<at89x52.h>
#include <intrins.h>
#define uchar unsigned char
#define LCM_Data P1
sbit rs = P3^7;
sbit rw = P3^6;
sbit ep = P3^4;
void delay_ms(unsigned int);
void lcd_wcmd(uchar);
void lcd_bz();
void lcd_pos(uchar);
void lcd_wdat(uchar);
void display(uchar,uchar *);
uchar code dis1[] = {" www.willar.com "};
uchar code dis2[] = {"WELCOME TO WEINA"};
void delay_ms(unsigned int i)
{
unsigned char j;
while (i--)
{
for( j=0;j<123;j++);
}
}
void lcd_bz()
{ // ??LCD????
bit result;
LCM_Data |= 0x80 ;
do
{
rs = 0;
rw = 1;
ep = 1;
result = (bit)(LCM_Data & 0x80);////
ep = 0;
}while (result == 1);
}
void lcd_wcmd(uchar cmd)
{ // ???????LCD
lcd_bz();
rs = 0;
rw = 0;
ep = 0;
LCM_Data = cmd;
ep = 1;
ep = 0;
}
void lcd_pos(uchar pos)
{ //??????
lcd_wcmd(pos | 0x80);
}
void lcd_wdat(uchar dat)
{ //?????????LCD
lcd_bz();
rs = 1;
rw = 0;
ep = 0;
LCM_Data = dat;
ep = 1;
ep = 0;
}
void lcd_init()
{ //LCD?????
delay_ms(15);
lcd_wcmd(0x38); //function set
delay_ms(5);
lcd_wcmd(0x38); //function set
delay_ms(5);
lcd_wcmd(0x38);
lcd_wcmd(0x38);
lcd_wcmd(0x08); //display on/off
lcd_wcmd(0x01); //??LCD?????
delay_ms(5);
lcd_wcmd(0x06); //entry mode set
lcd_wcmd(0x0c); //entry mode set
}
/*---------------
????:display()
?? :?LCD????????
?? :??????,??????
?? :lcd_wcmd(), lcd_pos()
????:pos ?????,q?????????????
??? :?
----------------*/
void display(uchar pos, uchar *q)
{
uchar i;
//lcd_wcmd(0x01); //clear
delay_ms(5);
lcd_pos(pos);
for(i=0;i<16;i++)
{
lcd_wdat(*q);
q++;
delay_ms(250);
}
}
main()
{
//delay_ms(500);
lcd_init(); // ???LCD
delay_ms(10);
display(0x00,dis1);
display(0x40,dis2);
//display(0x14,dis1);
//display(0x54,dis2);
//lcd_wcmd(0x07); //entry mode set
//delay(1);
while(1)
{ ;
//display(0x00,dis1);
//display(0x40,dis2);
//display(0x14,dis1);
//display(0x54,dis2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -