共2条
1/1 1 跳转至页
16,LCD 分享:2*16字符型LCD程序

问
#include<reg51.h>
//#include <intrins.h>
#define uchar unsigned char
bit bflag;
//sbit LIGHT=P0^4;
sbit P1_0=P1^0;
sbit P1_2=P1^2;
sbit RS=P2^0;//4jiao
sbit RW=P2^1;//5jiao
sbit E=P2^2;//6jiao
void lcd_clear(void); /*清屏*/
void lcd_chekbusy(void); /*测试忙*/
void lcd_wrcmd(uchar lcd_cmd); /*写命令*/
void lcd_wrdata(uchar lcd_data); /*写数据*/
void lcd_moveto(uchar position); /*写要显示的地方*/
//void lcd_cursor ( uchar cursor_cmd ); /*光标控制*/
void lcd_init(void); /*初始化*/
void delay(uchar x)
{
uchar i;
do
{
for(i=0;i<125;i++)
{;}
}
while (x--);
}
void lcd_chekbusy(void)
{
uchar middle;
do
{
RS=0;
RW=1;
E=1;
//delay(10);
middle=P0;
E=0;
bflag=(0x80&middle);
}
while(bflag==1);
bflag=1;
}
void lcd_wrcmd(uchar lcd_cmd)
{
//delay(1);
RS=0;
RW=0;
E=1;
P0=lcd_cmd;
//delay(1);
E=0;
//lcd_chekbusy();
//delay(1);
}
void lcd_wrdata(uchar lcd_data)
{
//lcd_chekbusy();
RS=1;
RW=0;
E=1;
P0=lcd_data;
E=0;
//lcd_chekbusy();
}
void lcd_clear(void)
{
lcd_wrcmd (0x01);
}
void lcd_moveto(uchar position) /*position为从左起算起1--16 */
{
uchar temp_1;
//lcd_chekbusy();
if (position<16)
temp_1=(position+0x80-1);
else
temp_1=((position-16)+0xc0);/////////////////已经修改
lcd_wrcmd(temp_1);
//lcd_chekbusy();
//delay ( 1 );
}
void lcd_wrstr( uchar *pdispstrda ) /* 函数 */
{ uchar i;
lcd_wrcmd(0x80); /*设置显示数据RAM*/
for (i=0;i<=7;i++)
{
lcd_wrdata(*pdispstrda);/* char of LCM */
pdispstrda++;
}
lcd_wrcmd(0xc0); /*设置显示数据RAM*/
for (i=0;i<=7;i++)
{
lcd_wrdata(*pdispstrda);/* char of LCM */
pdispstrda++;
}
}
void lcd_wrchar(uchar lcd_add,uchar lcd_data)
{
lcd_moveto(lcd_add);
lcd_wrdata(lcd_data);
}
void lcd_init(void)
{ uchar i;
delay(20);
for(i=0;i<8;i++)
{ lcd_wrcmd(0x30);
delay(5);
}
//lcd_chekbusy();
lcd_wrcmd(0x38);
lcd_chekbusy();
lcd_wrcmd(0x0c);
lcd_chekbusy();
lcd_wrcmd(0x06);
lcd_chekbusy();
lcd_wrcmd(0x01);
lcd_chekbusy();
}
main()
{
uchar dis_string[16]={"this is a test"};
uchar i,j,k;
k=1;
P0=0xff;
P2=0xff;
P1_2=1;
P1_0=0;
lcd_init();
bee:
lcd_moveto(1);
j='A';
for(i=0;i<16;i++)
{
delay(1);
lcd_wrdata(j);
j++;
};
lcd_wrcmd(0xc0);
for(i=0;i<16;i++)
{
delay(1);
lcd_wrdata(j);
j++;
}
delay(250);
lcd_wrstr(dis_string);
lcd_clear();
delay(1);
lcd_wrchar(3,'G');
delay(1);
lcd_wrdata('O');
delay(1);
lcd_wrdata('O');
delay(1);
lcd_wrdata('D');
P1_2=~P1_2;
goto bee;
} 答 1: 楼主的LCD主控芯片是什么型号啊? 答 2: 应该是通用的1602 lcd吧 答 3: ts1620对不起,各位,忘说了.是内含hd44780的ts1620.
//#include <intrins.h>
#define uchar unsigned char
bit bflag;
//sbit LIGHT=P0^4;
sbit P1_0=P1^0;
sbit P1_2=P1^2;
sbit RS=P2^0;//4jiao
sbit RW=P2^1;//5jiao
sbit E=P2^2;//6jiao
void lcd_clear(void); /*清屏*/
void lcd_chekbusy(void); /*测试忙*/
void lcd_wrcmd(uchar lcd_cmd); /*写命令*/
void lcd_wrdata(uchar lcd_data); /*写数据*/
void lcd_moveto(uchar position); /*写要显示的地方*/
//void lcd_cursor ( uchar cursor_cmd ); /*光标控制*/
void lcd_init(void); /*初始化*/
void delay(uchar x)
{
uchar i;
do
{
for(i=0;i<125;i++)
{;}
}
while (x--);
}
void lcd_chekbusy(void)
{
uchar middle;
do
{
RS=0;
RW=1;
E=1;
//delay(10);
middle=P0;
E=0;
bflag=(0x80&middle);
}
while(bflag==1);
bflag=1;
}
void lcd_wrcmd(uchar lcd_cmd)
{
//delay(1);
RS=0;
RW=0;
E=1;
P0=lcd_cmd;
//delay(1);
E=0;
//lcd_chekbusy();
//delay(1);
}
void lcd_wrdata(uchar lcd_data)
{
//lcd_chekbusy();
RS=1;
RW=0;
E=1;
P0=lcd_data;
E=0;
//lcd_chekbusy();
}
void lcd_clear(void)
{
lcd_wrcmd (0x01);
}
void lcd_moveto(uchar position) /*position为从左起算起1--16 */
{
uchar temp_1;
//lcd_chekbusy();
if (position<16)
temp_1=(position+0x80-1);
else
temp_1=((position-16)+0xc0);/////////////////已经修改
lcd_wrcmd(temp_1);
//lcd_chekbusy();
//delay ( 1 );
}
void lcd_wrstr( uchar *pdispstrda ) /* 函数 */
{ uchar i;
lcd_wrcmd(0x80); /*设置显示数据RAM*/
for (i=0;i<=7;i++)
{
lcd_wrdata(*pdispstrda);/* char of LCM */
pdispstrda++;
}
lcd_wrcmd(0xc0); /*设置显示数据RAM*/
for (i=0;i<=7;i++)
{
lcd_wrdata(*pdispstrda);/* char of LCM */
pdispstrda++;
}
}
void lcd_wrchar(uchar lcd_add,uchar lcd_data)
{
lcd_moveto(lcd_add);
lcd_wrdata(lcd_data);
}
void lcd_init(void)
{ uchar i;
delay(20);
for(i=0;i<8;i++)
{ lcd_wrcmd(0x30);
delay(5);
}
//lcd_chekbusy();
lcd_wrcmd(0x38);
lcd_chekbusy();
lcd_wrcmd(0x0c);
lcd_chekbusy();
lcd_wrcmd(0x06);
lcd_chekbusy();
lcd_wrcmd(0x01);
lcd_chekbusy();
}
main()
{
uchar dis_string[16]={"this is a test"};
uchar i,j,k;
k=1;
P0=0xff;
P2=0xff;
P1_2=1;
P1_0=0;
lcd_init();
bee:
lcd_moveto(1);
j='A';
for(i=0;i<16;i++)
{
delay(1);
lcd_wrdata(j);
j++;
};
lcd_wrcmd(0xc0);
for(i=0;i<16;i++)
{
delay(1);
lcd_wrdata(j);
j++;
}
delay(250);
lcd_wrstr(dis_string);
lcd_clear();
delay(1);
lcd_wrchar(3,'G');
delay(1);
lcd_wrdata('O');
delay(1);
lcd_wrdata('O');
delay(1);
lcd_wrdata('D');
P1_2=~P1_2;
goto bee;
} 答 1: 楼主的LCD主控芯片是什么型号啊? 答 2: 应该是通用的1602 lcd吧 答 3: ts1620对不起,各位,忘说了.是内含hd44780的ts1620.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |