为什么我的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<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"
这个咋办啊?变异一直有错误!