找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5595|回复: 4
打印 上一主题 下一主题
收起左侧

lcd1602显示器单片机程序不能显示内容怎么回事哪位大神能帮我看看啊

[复制链接]
跳转到指定楼层
楼主
#include<reg51.h>        //头文件
#define uchar unsigned char    //预定义
#define uint unsigned int
#define lcd_dat  P0
sbit lcdrs=P2^6;     //1602的数据/指令选择控制线
sbit lcdrw=P2^5;      //1602的读写控制线
sbit lcden=P2^4;      //1602的使能控制线
sbit yihao=P2^0;        //一号病房按键
sbit erhao=P2^1;
sbit sanhao=P2^2;
sbit sihao=P2^3;
uchar table1[]="Number";
uchar table2[]="1234";
void delay(uint z)       //延时子程序
{
  uint x,y;
  for(x=z;x>0;x--)   for(y=110;y>0;y--);
}
void write_com(uchar com)    //写命令子程序
{  
lcdrs=0;   
lcdrw=0;     
P0=com;  
delay(5);  
lcden=1;
delay(3);
lcden=0;
}
void write_data(uchar date)     //写数据子程序
{
lcdrs=1;   
lcdrw=0;     
P0=date;   
delay(5);  
lcden=1;  
delay(3);  
lcden=0;
}
void init()              //1602初始化子程序
{
write_com(0x38);//显示模式设置。        
delay(5);
write_com(0x0c);//关光标,不闪烁        
delay(5);  
write_com(0x06);  //显示地址递增,即写一个数据后,显示位置右移位         
delay(5);
write_com(0x01); //清屏
delay(5); }
void Number()                //显示Number子程序
{uchar m;
write_com(0x80);
       for(m=0;m<6;m++)     //将table[]中的数据依次写入1602显示     
{  
            write_data(table1[m]);                        
delay(200);
}
}
void main()            //主函数  
{
unsigned char FLAG;   //FLAG的值为P2口的值  
init();
do
{  
   FLAG=P2;
switch(FLAG&0X0f)      //屏蔽P2口高四位
{
case 0X0E:
       Number();
       write_com(0x80+10);   //显示地址设为90H(即10H,)上排第十位               
           write_data(table2[0]);                  
delay(200);     
break;
case 0X0D:
        Number();
        write_com(0x80+10);   //显示地址设为90H(即10H,)上排第十位               
                write_data(table2[1]);                       
        delay(200);           
        break;
case 0X0B:
       Number();
       write_com(0x80+10);   //显示地址设为90H(即10H,)上排第十位               
           write_data(table2[2]);                        
       delay(200);      
      break;
case 0X07:      
       Number();
       write_com(0x80+10);   //显示地址设为90H(即10H,)上排第十位            
           write_data(table2[3]);                       
        delay(200);            
        break;
default:
        break;   
       }   
   }
while(1);
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:151348 发表于 2017-4-20 21:25 | 只看该作者
没什么问题,下图就是按下按键后的效果

无标题.png (18.46 KB, 下载次数: 82)

无标题.png
回复

使用道具 举报

板凳
ID:111634 发表于 2017-4-20 21:32 | 只看该作者
本帖最后由 zl2168 于 2017-4-20 21:34 编辑

实例67  LCD1602显示屏显示
Proteus仿真一下,确认有效。
实例61 LCD1602显示屏显示.rar (49.26 KB, 下载次数: 23)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1。书中电路和程序设计有详细说明,程序语句条条有注解。
回复

使用道具 举报

地板
ID:191774 发表于 2017-4-24 15:52 | 只看该作者
imxuheng 发表于 2017-4-20 21:25
没什么问题,下图就是按下按键后的效果

如果我想让这个设计可以复位的话程序还得怎么改呢?
回复

使用道具 举报

5#
ID:151348 发表于 2017-4-24 15:53 | 只看该作者
流年似水@ 发表于 2017-4-24 15:52
如果我想让这个设计可以复位的话程序还得怎么改呢?

复位是什么意思
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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