1602液晶屏第一行地址需要加80H,那第二行呢?

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
单片机控制技术项目训练教程-项目六 1602液晶显示计数器制作
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口后使用快捷导航没有帐号?
请完成以下验证码
查看: 13453|回复: 15
51+LCD1602为什么第二行显示不了???
在线时间40 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 240, 距离下一级还需 260 积分
一粒金砂(高级), 积分 240, 距离下一级还需 260 积分
51+LCD1602为什么第二行显示不了???[local]1[/local]
希望大家帮忙解决一下这个问题
12:00 上传
点击文件名下载附件
219.76 KB, 下载次数: 104
在线时间0 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
恰好我也遇到过这个问题,原因是初始化是0x38要设置两次以上。
因为第一次在设置时,1602的控制芯片无法确定数据是几位的,只好默认是4位的。这是很有道理的。因为如果默认为8位,那四位用户怎么办?他们会很麻烦的。而默认为四位,对于8位用户则没什么了啦,因为在第一次设置0x38时,只有高四位3被识别,1602的控制芯片由此可知你要用8位数据线与他通信,这样第二次设置时高四位和第四位就都可以被接受了。而恰恰第四位中就由单双行设置位,如果只设置一次0x38的话,1602就处于默认的单行显示。
除此之外我还遇到另外一个问题,就是软件好像会改变lcd的特性,就是在相同的对比度电压输入下,不同的程序会有不同的显示效果。有两三次就是本来调好对比度了,改了改程序,就几乎看不清了,弄得我还以为没输出呢,动了动对比度输入电压,显示才又正常了。不知道你有没有遇到这样的问题。
在线时间279 小时
芯币4507枚
E金币165枚
TA的帖子TA的资源
一粒金砂(高级), 积分 494, 距离下一级还需 6 积分
一粒金砂(高级), 积分 494, 距离下一级还需 6 积分
正好也遇到这个问题,初始化 命令(0x38);//设置8位格式,2行,5x7
两次就可以了
每一刻都是崭新的,加油!
在线时间36 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 28, 距离下一级还需 172 积分
一粒金砂(中级), 积分 28, 距离下一级还需 172 积分
write_cmd_or_dat(0x80+i-16,c);& & & & & & & & //????为什么就是写不了第二行呢????
这里根本就没有把地址定到第二行 怎么能写得到第二行?
在线时间141 小时
威望1627分
E金币150枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1627, 距离下一级还需 373 积分
纯净的硅(高级), 积分 1627, 距离下一级还需 373 积分
第二行应该再加个0x40
在线时间40 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 240, 距离下一级还需 260 积分
一粒金砂(高级), 积分 240, 距离下一级还需 260 积分
回复 沙发 痞子相 的帖子
这行是没有.....可是write_cmd_or_dat(0x80+0x40+i-16,c).....也不行呀???我试过N+1次了....你可以试试....谢谢
在线时间141 小时
威望1627分
E金币150枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1627, 距离下一级还需 373 积分
纯净的硅(高级), 积分 1627, 距离下一级还需 373 积分
我的想法是要用个中断去判断他到了16去显示第二行,不知道有没有高手来解释下
在线时间134 小时
威望35074分
芯币3585枚
TA的帖子TA的资源
#include&sh88f516.h&
#include &stdio.h&
#include &intrins.h&
#define uchar unsigned char
#define uint unsigned int
#define nop()&&_nop_()
sbit status_busy=status^7;
sbit status_Reset=status^4;
sbit&&GXM1602_HD44780_E=P4^6;
sbit&&GXM1602_HD44780_RW=P4^7;
sbit&&GXM1602_HD44780_RS=P4^1;
void&&GXM1602_HD44780_delay1ms(uint delay_xms);
void&&GXM1602_HD44780_delay50us(uchar count50us);
void&&GXM1602_HD44780_command(uchar command_data);
void&&GXM1602_HD44780_data(uchar w_data);
void&&GXM1602_HD44780_read_busy();
void&&GXM1602_HD44780_initialize();
uchar&&code&&GXM1602_HD44780_dis_char[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
& && && && && && && && && && && && && & };
//* delay&&1ms&&*//
void GXM1602_HD44780_delay1ms(uint delay_xms)
& & uint data n,m;
& &for(n=0;n&delay_n++)
& & for(m=0;m&75;m++)
//***********delay50us************************//
void GXM1602_HD44780_delay50us(uchar count50us)
& &&&_nop_();
& & for(k=0;k&2*count50k++)
& && &_nop_();
& && &_nop_();
& && &_nop_();
& && &_nop_();
& && &_nop_();
//*********************************************
//向1602里面输入命令
//*********************************************
void GXM1602_HD44780_command(uchar command_data)
{& && &&&//RS=0;
& && && &//RW=0;
& && && &GXM1602_HD44780_E=0;
& & & & & & & &&&GXM1602_HD44780_RS=0;
& && && &GXM1602_HD44780_RW=0;
& && && &GXM1602_HD44780_E=1;
& && && &P1=command_
& && && &GXM1602_HD44780_delay1ms(0x02);
& && && &_nop_();
& && && &GXM1602_HD44780_E=0;
& && && &GXM1602_HD44780_RS=1;
& && && &GXM1602_HD44780_RW=1;
//*********************************************
//向1602里面输入数据
//*********************************************
void GXM1602_HD44780_data(uchar w_data)
& && &&&GXM1602_HD44780_RS=1;
& && &&&GXM1602_HD44780_RW=0;
& && &&&GXM1602_HD44780_E=1;
& && &&&P1=w_
& && &&&GXM1602_HD44780_delay50us(0x02);
& && &&&_nop_();
& && &&&GXM1602_HD44780_E=0;
& && &&&GXM1602_HD44780_RS=0;
& && &&&GXM1602_HD44780_RW=1;
//**********************************************
//1602读忙状态
//**********************************************
void&&GXM1602_HD44780_read_busy()
& && &&&GXM1602_HD44780_RS=0;
& && &&&GXM1602_HD44780_RW=1;
& && &&&GXM1602_HD44780_E=1;
& && &&&status=P1;
& && &&&GXM1602_HD44780_delay50us(0x02);
& && &&&GXM1602_HD44780_delay50us(0x02);
& && &&&while(status_busy);
& && &&&_nop_();
& && &&&GXM1602_HD44780_E=0;
& && &&&GXM1602_HD44780_RS=0;
& && &&&GXM1602_HD44780_RW=1;
//***********************************************
//1602初始化状态
//***********************************************
void GXM1602_HD44780_initialize()
& && &P1=0;
& && &GXM1602_HD44780_command(0x38);//N=1&&2 line&&diaplay& & DL=1 8_bit bus mode whih MPU F=0 5*8 dots //
& && &GXM1602_HD44780_delay50us(0x02);
& && &GXM1602_HD44780_read_busy();
& && &GXM1602_HD44780_command(0x01);&&/* CLR LCD AC=0 AC+1清屏 */
& && &GXM1602_HD44780_delay1ms(0x02);
& && &GXM1602_HD44780_read_busy();
& && &//write_command(0x8f); //
& && &GXM1602_HD44780_command(0x02);//归home位 set DDRAM Adress&&is 00h //
& && &GXM1602_HD44780_delay1ms(0x02);
& && &GXM1602_HD44780_read_busy();
& && &GXM1602_HD44780_command(0x04);// 1 I/D S&&I/D=0 cursor/blink moves to left and ddram address is decreased by 1 //
& && &GXM1602_HD44780_delay50us(0x02);
& && &GXM1602_HD44780_read_busy();
& && &GXM1602_HD44780_command(0x0c);//1DCB& &D=1 entire display is turned on cursor off //cursor bink off& &//
& && &GXM1602_HD44780_delay50us(0x02);
& && &GXM1602_HD44780_read_busy();
& &//& &GXM1602_HD44780_command(0x07);
& &//& &GXM1602_HD44780_delay50us(0x02);
& &//& &GXM1602_HD44780_read_busy();
//& &uchar data i,j;
& & GXM1602_HD44780_initialize();
& && &while(1)
& &//& &GXM1602_HD44780_command(0x40);& &
& &//& &GXM1602_HD44780_delay50us(0x02);
& & & & GXM1602_HD44780_command(0x80);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x2b);
& &&&GXM1602_HD44780_delay50us(0x01);
& && &GXM1602_HD44780_command(0x81);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x34);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0x82);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x30);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0x83);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x2e);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & & GXM1602_HD44780_command(0x84);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x33);
& &&&GXM1602_HD44780_delay50us(0x01);
& && &GXM1602_HD44780_command(0x86);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x31);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0x87);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x30);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0x88);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x2e);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & & GXM1602_HD44780_command(0x89);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x32);
& &&&GXM1602_HD44780_delay50us(0x01);
& && &GXM1602_HD44780_command(0x8a);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x35);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0x8b);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x38);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0x8d);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x30);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0x8e);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x34);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0x8f);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x30);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&//////////////////////////////////////
& & & &&&& & & & GXM1602_HD44780_command(0xc0);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x2b);
& &&&GXM1602_HD44780_delay50us(0x01);
& && &GXM1602_HD44780_command(0xc1);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x34);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0xc2);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x30);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0xc3);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x2e);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & & GXM1602_HD44780_command(0xc4);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x33);
& &&&GXM1602_HD44780_delay50us(0x01);
& && &GXM1602_HD44780_command(0xc6);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x31);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0xc7);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x30);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0xc8);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x2e);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & & GXM1602_HD44780_command(0xc9);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x32);
& &&&GXM1602_HD44780_delay50us(0x01);
& && &GXM1602_HD44780_command(0xca);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x35);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0xcb);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x38);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0xcd);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x30);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0xce);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x34);
& &&&GXM1602_HD44780_delay50us(0x01);
& & & &&&GXM1602_HD44780_command(0xcf);
& && &GXM1602_HD44780_delay50us(0x01);
& &&&GXM1602_HD44780_data(0x30);
& &&&GXM1602_HD44780_delay50us(0x01);
& && &&&GXM1602_HD44780_delay1ms(1000);
南京璞晓电子& &需要
在线时间134 小时
威望35074分
芯币3585枚
TA的帖子TA的资源
这个程序是可以显示的,我之前写的一个测试程序,你可以看看。
南京璞晓电子& &需要
在线时间1981 小时
威望44440分
芯币46181枚
E金币1842枚
TA的帖子TA的资源
这类问题,建议楼主不要去求现成,正确、完整的理解LCD的操作手册你自然会知道哪里有问题,去看手册吧,这是电工的基本技能。
在线时间40 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 240, 距离下一级还需 260 积分
一粒金砂(高级), 积分 240, 距离下一级还需 260 积分
回复 8楼 chunyang 的帖子
谢谢提醒.....不过我真的很认真的看过LCD的说明了...我上传的程序和原理图都是我自己根据说明写的.....而且我还查过很多资料关于第二行显示的....不过觉得自己写的没错啊??.....
在线时间147 小时
威望1575分
芯币1354枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1575, 距离下一级还需 425 积分
纯净的硅(高级), 积分 1575, 距离下一级还需 425 积分
1602,完整硬件测试通过,希望对楼主有用
21:45 上传
点击文件名下载附件
5.56 KB, 下载次数: 154
在线时间40 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 240, 距离下一级还需 260 积分
一粒金砂(高级), 积分 240, 距离下一级还需 260 积分
这个问题已经解决...................谢谢各位
在线时间0 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
lCD1602显示不了第二行
#include&reg51.h&& &//头文件
#define uint unsigned int //
#define uchar unsigned char
sbit lcden=P2^3; //定义引脚
sbit rs=P2^4;
sbit rw=P2^0;
sbit busy=P0^7;
char i,j,temp,num,num_1;
long a,b,c;& &&&//a,第一个数 b,第二个数 c,得数
float a_c,b_c;
uchar flag,//flag表示是否有符号键按下,fuhao表征按下的是哪个符号
uchar code table[]={
uchar code table1[]={
7,8,9,0x2f-0x30,
4,5,6,0x2a-0x30,
1,2,3,0x2d-0x30,
0x01-0x30,0,0x3d-0x30,0x2b-0x30};
void delay(uchar z) // 延迟函数
for(z;z&0;z--)
& &for(y=0;y&110;y++);
void check() // 判断忙或空闲
& & P0=0xFF;
& & rs=0;& &&&//指令
& & rw=1;& &&&//读
& & lcden=0;& &&&//禁止读写
& & delay(1); //等待,液晶显示器处理数据
& & lcden=1;& &&&//允许读写
& & }while(busy==1); //判断是否为空闲,1为忙,0为空闲
void write_com(uchar com) // 写指令函数
P0=& & //com指令付给P0口
void write_date(uchar date) // 写数据函数
void init() //初始化
& & num=-1;
lcden=1; //使能信号为高电平
write_com(0x38); //8位,2行
write_com(0x0c); //显示开,光标关,不闪烁*/
write_com(0x06); //增量方式不移位 显竟獗暌贫 柚?
write_com(0x80); //检测忙信号
write_com(0x01); //显示开,光标关,不闪烁
a=0;& &&&//第一个参与运算的数
b=0;& &&&//第二个参与运算的数
flag=0; //flag表示是否有符号键按下,
fuhao=0; // fuhao表征按下的是哪个符号
void keyscan() // 键盘扫描程序
if(P3!=0xfe)
& &delay(20); //延迟20ms
& &if(P3!=0xfe)
& & temp=P3&0xf0;
& & switch(temp)
& &&&case 0xe0:num=0;
& &&&case 0xd0:num=1;
& &&&case 0xb0:num=2;
& &&&case 0x70:num=3;
& &while(P3!=0xfe);
& &if(num==0||num==1||num==2)//如果按下的是'7','8'或'9
& && & if(j!=0)
& && && & write_com(0x01);
& && && & j=0;
& && && &}
& && & if(flag==0)//没有按过符号键
& &&&a=a*10+table[num];
& & else//如果按过符号键
& &&&b=b*10+table[num];
& &else//如果按下的是'/'
& & flag=1;
& & fuhao=4;//4表示除号已按
& &i=table1[num];
& &write_date(0x30+i);
if(P3!=0xfd)
& &delay(5);
& &if(P3!=0xfd)
& & temp=P3&0xf0;
& & switch(temp)
& &&&case 0xe0:num=4;
& &&&case 0xd0:num=5;
& &&&case 0xb0:num=6;
& &&&case 0x70:num=7;
& &while(P3!=0xfd);
& &if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6'
& & if(j!=0)
& && && & write_com(0x01);
& && && & j=0;
& && && &}
& && & if(flag==0)//没有按过符号键
& &&&a=a*10+table[num];
& & else//如果按过符号键
& &&&b=b*10+table[num];
& &else//如果按下的是'/'
& & flag=1;
& & fuhao=3;//3表示乘号已按
& &i=table1[num];
& &write_date(0x30+i);
if(P3!=0xfb)
& &delay(5);
& &if(P3!=0xfb)
& & temp=P3&0xf0;
& & switch(temp)
& &&&case 0xe0:num=8;
& &&&case 0xd0:num=9;
& &&&case 0xb0:num=10;
& &&&case 0x70:num=11;
& &while(P3!=0xfb);
& &if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'
& & if(j!=0)
& && && & write_com(0x01);
& && && & j=0;
& && && &}
& && &if(flag==0)//没有按过符号键
& &&&a=a*10+table[num];
& & else//如果按过符号键
& &&&b=b*10+table[num];
& &else if(num==11)//如果按下的是'-'
& & flag=1;
& & fuhao=2;//2表示减号已按
& &i=table1[num];
& &write_date(0x30+i);
if(P3!=0xf7)
& &delay(5);
& &if(P3!=0xf7)
& & temp=P3&0xf0;
& & switch(temp)
& &&&case 0xe0:num=12;
& &&&case 0xd0:num=13;
& &&&case 0xb0:num=14;
& &&&case 0x70:num=15;
& &while(P3!=0xf7);
& &switch(num)
& & case 12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是&清零&
& & case 13:{& && && && && & //按下的是&0&
& && & if(flag==0)//没有按过符号键
& && &&&a=a*10;
& && &&&write_date(0x30);
& && &&&P1=0;
& && & else if(flag==1)//如果按过符号键
& && &&&b=b*10;
& && &&&write_date(0x30);
& & case 14:{j=1;
& && && &&&if(fuhao==1){write_com(0x80+0x4f);//按下等于键,光标前进至第二行最后一个显示处
& && && &&&write_com(0x04);& &&&//设置从后住前写数据,每写完一个数据,光标后退一格
& && && &&&c=a+b;
& && && &&&while(c!=0)
& && && &&&{
& && && && & write_date(0x30+c%10);
& && && && & c=c/10;
& && && &&&}
& && && &&&write_date(0x3d);& &&&//再写&=&
& && && &&&a=0;b=0;flag=0;fuhao=0;
& && && &&&}
& && &else if(fuhao==2){write_com(0x80+0x4f);//光标前进至第二行最后一个显示处
& && && && &write_com(0x04);& &&&//设置从后住前写数据,每写完一个数据,光标后退一格(这个照理说顺序不对,可显示和上段一样)
& && && &&&if(a-b&0)
& && && && & c=a-b;
& && && &&&else
& && && && & c=b-a;
& && && &&&while(c!=0)
& && && &&&{
& && && && & write_date(0x30+c%10);
& && && && & c=c/10;
& && && &&&}
& && && &&&if(a-b&0)
& && && && & write_date(0x2d);
& && && &&&write_date(0x3d);& &&&//再写&=&& && && &&&
& && && &&&a=0;b=0;flag=0;fuhao=0;
& && && & }
& && &else if(fuhao==3){write_com(0x80+0x4f);
& && && && &write_com(0x04);
& && && && & c=a*b;
& && && && & while(c!=0)
& && && && & {
& && && && & write_date(0x30+c%10);
& && && && & c=c/10;
& && && && & }
& && && && & write_date(0x3d);& &&&
& && && & a=0;b=0;flag=0;fuhao=0;
& && && && & }
& && &else if(fuhao==4){write_com(0x80+0x4f);
& && && && &write_com(0x04);
& && && && &i=0;
& && && && &c=(long)(((float)a/b)*1000);
& && && && &while(c!=0)
& && && && & {
& && && && && &write_date(0x30+c%10);
& && && && && &c=c/10;
& && && &&&i++;
& && && &&&if(i==3)
& && && && && &write_date(0x2e);
& && && && & }
& && && && &if(a/b&=0)
& && && && &&&write_date(0x30);
& && && && &write_date(0x3d);& && && && && && && && && && &
& && && && &a=0;b=0;flag=0;fuhao=0;
& && && && && && &&&}
& &&&case 15:{write_date(0x30+table1[num]);flag=1;fuhao=1;}
& &keyscan();
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
1602很实用~~
在线时间69 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 158, 距离下一级还需 42 积分
一粒金砂(中级), 积分 158, 距离下一级还需 42 积分
地址有问题
技术导师勋章
论坛威望大于30000或网友提名:坛子里公认的技术导师
EEWORLD 官方微信
Powered by1602液晶显示器资料--一看即会--附程序-博泰典藏网
典藏文档 篇篇精品
1602液晶显示器资料--一看即会--附程序
导读:1602液晶显示器资料,字符液晶在实际的产品中运用的也比较多了,发现宿舍门前的自动售水机就是采用的1602液晶进行显示的,所谓1602是指显示的内容为16*2,即可以显示两行,目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶,1602液晶的正面(绿色背,1602液晶背面(绿色背,另一种1602液晶模块,显示屏1602液晶显示器资料 字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采用的1602液晶进行显示的。而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。
所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602液晶的正面(绿色背光,黑色字体)
1602液晶背面(绿色背光,黑色字体)
另一种1602液晶模块,显示屏是蓝色背光白色字体
字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:
HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:
也就是说想要在LCD1602屏幕的第一行第一列显示一个\字,就要向DDRAM的00H地址写入“A”字的代码就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:
DDRAM地址与显示位置的对应关系
(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。依次类推。大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了)
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是 B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
上表中的字符代码与我们PC中的字符代码是基本一致的。因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。PC在编译时就把“A”先转为41H代码了。
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。后面我会详细说的。
0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。
那么如何对DDRAM的内容和地址进行具体操作呢,下面先说说HD44780的指令集及其设置说明,请浏览该指令集,并找出对DDRAM的内容和地址进行操作的指令。共11条指令:
共11条指令: 1.清屏指令
功能: 清除液晶显示器,即将DDRAM的内容全部填入\空白\的ASCII码20H;
光标归位,即将光标撤回液晶显示屏的左上方;
将地址计数器(AC)的值设为0。 2.光标归位指令
功能: 把光标撤回到显示器的左上方;
把地址计数器(AC)的值设置为0;
保持DDRAM的内容不变。
3.进入模式设置指令
功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的
情况如下所示:
0=写入新数据后光标左移
1=写入新数据后光标右移
0=写入新数据后显示屏不移动
1=写入新数据后显示屏整体右移1个字符
4.显示开关控制指令
功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:
0=显示功能关
1=显示功能开
0=光标闪烁
1=光标不闪烁
5.设定显示屏或光标移动方向指令
功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:
光标左移1格,且AC值减1
光标右移1格,且AC值加1
显示器上字符全部左移一格,但光标不动
显示器上字符全部右移一格,但光标不动
6.功能设定指令
功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:
0=数据总线为4位
1=数据总线为8位 包含总结汇报、行业论文、自然科学、旅游景点、高中教育、农林牧渔、求职职场、外语学习、医药卫生以及1602液晶显示器资料--一看即会--附程序等内容。本文共3页
相关内容搜索

我要回帖

更多关于 1602液晶显示模块 的文章

 

随机推荐