找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

有谁帮我看下这个为啥仿真不出来

查看数: 2709 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-5-5 10:43

正文摘要:

程序如下: #include <reg51.h> #define uint unsigned int #define uchar unsigned char sbit rs=P3^5; sbit rw=P3^6; sbit e=P3^7; uchar table; char en; /*uchar code table1[]="Huan Ying ...

回复

ID:92306 发表于 2017-5-8 09:19

谢谢分享,我下个学习一下。
ID:159139 发表于 2017-5-8 01:11
谢谢分享,我下个学习一下。
ID:111634 发表于 2017-5-7 20:19
本帖最后由 zl2168 于 2017-5-7 20:38 编辑

实例67  LCD1602显示屏显示
本例编制的LCD 1602显示程序标准化程度很好,若要显示其他字符,只需给数组x[16]、y[16]重新赋值即可。
Proteus仿真一下,确认有效。
实例61 LCD1602显示屏显示.rar (49.26 KB, 下载次数: 4)



以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1
。书中电路和程序设计有详细说明,程序语句条条有注解。
仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。




ID:110456 发表于 2017-5-7 12:41
#include <reg51.h>
#include <intrins.h>       
#define uint unsigned int
#define uchar unsigned char
#define lcd_data P0

sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;

/*uchar code table1[]="Huan Ying Cheng Zuo";
uchar code table2[]="Li Gong Nan Yuan Dao Le";
uchar code table3[]="Li Gong Xue Yuan Dao Le";
uchar code table4[]="Hua ban Qiao Dao Le";
uchar code table5[]="Xie Xie Cheng Zuo"; */

uchar code table1[]="LCD1206 check ok";
uchar code table2[]="study up";

void lcd_w_cmd(unsigned char com);        //写命令字函数
void lcd_w_dat(unsigned char dat);         //写数据函数
unsigned char lcd_r_start();                //读状态函数
void lcd_int1();                                //LCD初始化函数

void  delay (uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void delay1()      
{  
   _nop_();
   _nop_();
   _nop_();
}

unsigned char lcd_r_start()         
{
   unsigned char s;
   RW=1;                //RW=1,RS=0,读LCD状态
   delay1();
   RS=0;
   delay1();
   E=1;                        //E端时序
   delay1();
   s=lcd_data;                //从LCD的数据口读状态
   delay1();
   E=0;
   delay1();
   RW=0;
   delay1();
   return(s);                //返回读取的LCD状态字
}
//函数名:lcd_w_cmd
//函数功能:写命令字
//形式参数:命令字已存入com单元中
//返回值:无
void lcd_w_cmd(unsigned char com)   
{
   unsigned char i;
   do {                        // 查LCD忙操作
      i=lcd_r_start();        // 调用读状态字函数
      i=i&0x80;                // 与操作屏蔽掉低7位
      delay(2);
      } while(i!=0);        // LCD忙,继续查询,否则退出循环
          RW=0;
          delay1();
          RS=0;                        // RW=1,RS=0,写LCD命令字
          delay1();
          E=1;                        //E端时序
          delay1();
          lcd_data=com;                //将com中的命令字写入LCD数据口
          delay1();
          E=0;
          delay1();
          RW=1;
          delay(255);
}
//函数名:lcd_w_dat
//函数功能:写数据
//形式参数:数据已存入dat单元中
//返回值:无
void lcd_w_dat(unsigned char dat)   
{
   unsigned char i;
   do {                        // 查忙操作
      i=lcd_r_start();        // 调用读状态字函数
      i=i&0x80;         // 与操作屏蔽掉低7位
      delay(2);            
      } while(i!=0);        // LCD忙,继续查询,否则退出循环
   RW=0;
   delay1();
   RS=1;                // RW=1,RS=0,写LCD命令字
   delay1();
   E=1;                        // E端时序
   delay1();
   lcd_data=dat;                // 将dat中的显示数据写入LCD数据口
   delay1();
   E=0;
   delay1();
   RW=1;
   delay(255);
}
void lcd_init()
{
   lcd_w_cmd(0x38);        // 设置工作方式
   lcd_w_cmd(0x0c);        // 设置光标
   lcd_w_cmd(0x01);        // 清屏
   lcd_w_cmd(0x06);        // 设置输入方式
   lcd_w_cmd(0x80);        // 设置初始显示位置
}
void main()
{
uchar n,m=0;
lcd_init();
lcd_w_cmd(0x80);
for(m=0;m<16;m++)
{
  lcd_w_dat(table1[m]);
  delay(200);
}

while(1)
{
lcd_w_cmd(0xC4);
for(n=0;n<8;n++)
{
lcd_w_dat(table2[n]);
  delay(200);
}
}
}
程序附上,你可以看看。我只改变了,使能端,你可以改。

1602.png (9.66 KB, 下载次数: 48)

你的主程序不应该写while(1);等待,还有你1602的各个函数有误

你的主程序不应该写while(1);等待,还有你1602的各个函数有误

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

Powered by 单片机教程网

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