📄 1602.txt
字号:
发一个1602滚动显示的C51程序,欢迎大家讨论。
功能:从左至右,分2行滚动显示:“www.willar.com”和“WELCOME TO WEINA”
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
typedef bit BOOL
sbit rs = P2^0;
sbit rw = P2^1;
sbit ep = P2^2;
void delay(uchar);
void lcd_wcmd(uchar);
BOOL 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 longdelay(uchar s) //长延时
{
while(s--)
{
delay(60);
}
}
void delay(uchar ms)
{ // 延时子程序
uchar i;
while(ms--)
{
for(i = 0; i< 250; i++);
}
}
lcd_bz()
{ // 测试LCD忙碌状态
BOOL result;
rs = 0;
rw = 1;
ep = 1;
result = (BOOL)(P0 & 0x80);
ep = 0;
return result;
}
void lcd_wcmd(uchar cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
rs = 0;
rw = 0;
ep = 0;
P0 = cmd;
ep = 1;
ep = 0;
}
void lcd_pos(uchar pos)
{ //设定显示位置
lcd_wcmd(pos | 0x80);
}
void lcd_wdat(uchar dat)
{ //写入字符显示数据到LCD
while(lcd_bz());
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
ep = 1;
ep = 0;
}
void lcd_init()
{ //LCD初始化设定
lcd_wcmd(0x38); //function set
delay(1);
lcd_wcmd(0x38); //function set
delay(1);
lcd_wcmd(0x08); //display on/off
delay(1);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(1);
lcd_wcmd(0x06); //entry mode set
delay(1);
lcd_wcmd(0x0c); //entry mode set
delay(1);
}
/*---------------
函数名称:display()
功能 :在LCD上显示数组的数据
说明 :先写显示地址,后写显示数据
调用 :lcd_wcmd(), lcd_pos()
入口参数:pos 写入的位置,q指向要写入的数据所在的数组
返回值 :无
----------------*/
void display(uchar pos, uchar *q)
{
uchar i;
//lcd_wcmd(0x01); //clear
delay(10);
lcd_pos(pos);
for(i=0;i<16;i++)
{
lcd_wdat(*q);
q++;
longdelay(2);
}
}
main()
{
lcd_init(); // 初始化LCD
delay(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 + -