微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么我的proteus仿真lced1602显示会这样呢

为什么我的proteus仿真lced1602显示会这样呢

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#include<intrins.h>
#include"MacroAndConst.h"
#include"DS1302.h"
sbit io_lcd1602_RS=P2^3;        //定义端口
sbit io_lcd1602_RW=P2^4;
sbit io_lcd1602_E=P2^5;
#define io_lcd1602_DB P0
              
uint8 display_data1[]={"2012-10-14 90%RH"};    //显示数组,存储显示数据
uint8 display_data2[]={"  17:52:50  T=30"};
uint8 second_ge,second_shi,minute_ge,minute_shi,hour_ge,hour_shi,day_ge,day_shi,month_ge,month_shi,year_ge,year_shi;
uint8 LCD1602_ReadBusyCheck(void)        //读检查忙函数,判读lcd1602是否在忙
{
uint8 busycheck;
io_lcd1602_RS=0;
io_lcd1602_RW=1;
io_lcd1602_E=1;
_nop_();
_nop_();
_nop_();
busycheck=io_lcd1602_DB;        
io_lcd1602_E=0;
return busycheck;  
}
void LCD1602_WriteOrder(uint8 order)      //向lcd1602写显示指令
{
while((LCD1602_ReadBusyCheck()&0x80)==0x80);
io_lcd1602_RS=0;
io_lcd1602_RW=0;
io_lcd1602_E=0;
  io_lcd1602_DB=order;
io_lcd1602_E=1;
_nop_();
_nop_();
io_lcd1602_E=0;
}   
static void LCD1602_WriteData(uint8 dat)   //向lcd1602写显示数据
{
while((LCD1602_ReadBusyCheck()&0x80)==0x80);
io_lcd1602_RS=1;
io_lcd1602_RW=0;
io_lcd1602_E=0;
  io_lcd1602_DB=dat;
io_lcd1602_E=1;
_nop_();
_nop_();
io_lcd1602_E=0;
}
void LCD1602_Init()           //初始化函数
{
io_lcd1602_DB=0xff;
LCD1602_WriteOrder(0x38);        //设置8位格式,2行,5*7
LCD1602_WriteOrder(0x38);
LCD1602_WriteOrder(0x0c);        //整体显示,关光标,不闪烁
LCD1602_WriteOrder(0x06);        //设定输入格式,增量不移位
LCD1602_WriteOrder(0x01);        //清屏
}
void LCD1602_Display_Handle()        //显示数据处理
{
second_ge=clock_data[0]%10;        //分离个位和十位
second_shi=clock_data[0]/10;
minute_ge=clock_data[1]%10;
minute_shi=clock_data[1]/10;
hour_ge=clock_data[2]%10;
hour_shi=clock_data[2]/10;
day_ge=clock_data[3]%10;
day_shi=clock_data[3]/10;
month_ge=clock_data[4]%10;
month_shi=clock_data[4]/10;
year_ge=clock_data[5]%10;
year_shi=clock_data[5]/10;
display_data2[9]=second_ge;       //把数据送入显示数组
display_data2[8]=second_shi;
display_data2[6]=minute_ge;
display_data2[5]=minute_shi;
display_data2[3]=hour_ge;
display_data2[2]=hour_shi;
display_data1[9]=day_ge;
display_data1[9]=day_shi;
display_data1[6]=month_ge;
display_data1[5]=month_shi;
display_data1[3]=year_ge;
display_data1[2]=year_shi;      
}
void LCD1602_Display(uint8 address,uint8 y,uint8 content[16])     //送显示地址和显示数据
{
uint8 i;
if(y==1)
{
  LCD1602_WriteOrder(address|0x80);
}
else
{
  LCD1602_WriteOrder(address|0xc0);
}
for(i=0;i<16;i++)
  LCD1602_WriteData(content[i]);
}
void LCD1602_Updata()              //把数据送入lcd1602,做最终处理
{
LCD1602_Display_Handle();
LCD1602_Display(0x00,1,display_data1);
LCD1602_Display(0x00,2,display_data2);
}


肯定程序有问题!鉴定完毕

有什么问题能不能指教下

送出数据或地址不对

为什么我的里面没有包含#include"MacroAndConst.h"
#include"DS1302.h"
这个咋办啊?变异一直有错误!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top