找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3127|回复: 9
收起左侧

LCD1602程序的2个问题

[复制链接]
ID:102056 发表于 2016-11-17 00:11 来自触屏版 | 显示全部楼层 |阅读模式
1.在LCD1602显示程序中关于主函数for(num=0;num<13;num++),每次扫描程序,num都有要加1,选择数组的位都会变,但是显示都是一样的?为啥什么要取13,别的数可不可以?
2.uchar code table[]="Good morning!";如果字符串不止一个该如何写,那又在选择数组的位是不是相同的方法。


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="Good morning!";
sbit LED1602_E=P2^7;
sbit LED1602_RS=P2^6;
sbit LED1602_WR=P2^5;
uchar num;
void Delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void write_com(uchar com)
{
LED1602_E=0;
LED1602_RS=0;
LED1602_WR=0;
P0=com;
Delay(5);
LED1602_E=1;
Delay(5);
LED1602_E=0;
P0=com<<4;
Delay(5);
LED1602_E=1;
Delay(5);
LED1602_E=0;
}
void write_data(uchar date)
{
LED1602_E=0;
LED1602_RS=1;
LED1602_WR=0;
P0=date;
Delay(5);
LED1602_E=1;
Delay(5);
LED1602_E=0;
P0=date<<4;
Delay(5);
LED1602_E=1;
Delay(5);
LED1602_E=0;
}
void Init()
{
LED1602_E=0;
write_com(0x32);
write_com(0x28);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x02);
}
void main()
{
Init();
for(num=0;num<13;num++)
{
write_data(table[num]);
}
while(1)
{





回复

使用道具 举报

ID:7485 发表于 2016-11-17 09:24 | 显示全部楼层
这个问题不是告诉你“可以选择其他数据”就解决的。你必须弄懂“for”循环的方法。

在“for(num=0;num<13;num++)”中,“num=0”是进入循环时的初值,“num=13”是循环的最大值,“num++”是每循环一次num就加1,当num加到13时就退出循环。

总的意思就是循环内的语句执行13次。
回复

使用道具 举报

ID:111634 发表于 2016-11-17 09:29 | 显示全部楼层
不从基础理论学起,就会产生一系列莫名其妙的问题,学习方法要改进啊!
回复

使用道具 举报

ID:111634 发表于 2016-11-17 09:35 | 显示全部楼层
几十年以前,有一家无线电厂,收音机修理师傅,修理本场产的收音机极其熟练,几乎到了一看故障现象就知道毛病出在哪儿。但是让他修理其他无线电厂生产的收音机,却一筹莫展,为什么呢?
回复

使用道具 举报

ID:111634 发表于 2016-11-17 09:39 | 显示全部楼层
不学理论,不打好基础,只知其一,不知其二,不能举一反三,事倍功半。
回复

使用道具 举报

ID:102056 发表于 2016-11-17 11:02 来自触屏版 | 显示全部楼层
ahshmj 发表于 2016-11-17 09:24
这个问题不是告诉你“可以选择其他数据”就解决的。你必须弄懂“for”循环的方法。

在“for(num=0;num

主函数的for我已经弄明白了,good morning字符串就是12个字符,for循环就把12个字符全部显示。
回复

使用道具 举报

ID:102056 发表于 2016-11-17 11:23 来自触屏版 | 显示全部楼层
zl2168 发表于 2016-11-17 09:29
不从基础理论学起,就会产生一系列莫名其妙的问题,学习方法要改进啊!

在学LCD1602就看了相关内容的书,这个程序本身都是套路,虽然不太理解,但是我知道我要改程序的位置。需要用到的知识。
回复

使用道具 举报

ID:102056 发表于 2016-11-17 13:09 来自触屏版 | 显示全部楼层
zl2168 发表于 2016-11-17 09:39
不学理论,不打好基础,只知其一,不知其二,不能举一反三,事倍功半。

对于我们普通人来说,短板太多,没有那么多精力去学习,首先我要会用,其次能懂,最后才是学精,一本书看完要花多长时间,看懂要花多长时间,看懂就一定会用吗?就像学了几十年英语,就能和老外沟通吗?要用什么就学什么,不懂就直接翻书到对应的地方去查,或百度,学会利用各方面资源和有用信息,能搞通不就行了。不要纠结看了多少相关的书,未必看懂,能继续看下去。
回复

使用道具 举报

ID:102056 发表于 2016-11-17 13:17 来自触屏版 | 显示全部楼层
zl2168 发表于 2016-11-17 09:29
不从基础理论学起,就会产生一系列莫名其妙的问题,学习方法要改进啊!

有问题就好,就怕学完整本书,没有半点疑问,理论分析猛如虎,一顿操作0-5。带着问题去学习,有针对性学习没有什么不好的。就是要锻炼提出问题,解决问题的能力。
回复

使用道具 举报

ID:102056 发表于 2016-11-17 13:33 来自触屏版 | 显示全部楼层
zl2168 发表于 2016-11-17 09:35
几十年以前,有一家无线电厂,收音机修理师傅,修理本场产的收音机极其熟练,几乎到了一看故障现象就知道毛 ...

但是对于你这个故事,你有没有想过这个问题,假设这个师傅没念过书的人,对于他来说他有今天这个技术,完全是考自己摸索出来的,维修完全靠的是自己的经验,所以他不会修其他厂的设备很正常。所以给我们启示那个老师傅也只能当老师傅,我们必须掌握核心技术,不断提升自己能力,不止要学经验也要学真本领,自己才会长足发展。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表