微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > keil程序编译无错,但是无法在LCD1602上显示东西

keil程序编译无错,但是无法在LCD1602上显示东西

时间:10-02 整理:3721RD 点击:
我打算实现在lcd上显示时分秒功能,但是无法显示,求大神们指导啊!要哭了都!
#include<reg52.h>
#define unit unsigned int
#define unit unsigned long int
#define unit unsigned char uchar code table[]={'0','1','2','3','4','5','6','7','8','9'};
unsigned char table[];
unsigned char table1[]=" : ";
sbit RS_LCD=P0^7;
sbit RW_LCD=P0^6;
sbit EN_LCD=P0^5;
void init_lcd();
void init_zd();
void Write_com(unsigned char com);
void Write_date(unsigned char date);
void lcd_pos (unsigned char pos);
void delay(unit xms);
void date_processing();
unit sum = 0 ;
unsigned char time_seconds=0;
unsigned char time_minutes=0;
unsigned char time_hours=0;
unsigned char x=0;
void main()
{
unsigned char i;
init_lcd();
init_zd();
while(1);
{
date_processing();
lcd_pos (0x41);
Write_date(table[time_hours/10]);
delay(5);
Write_date(table[time_hours%10]);
delay(5);
for(i=0;i<3;i++)
{
Write_date(table1);
delay(5);
}
Write_date(table[time_minutes/10]);
delay(5);
Write_date(table[time_minutes%10]);
delay(5);
for(i=0;i<3;i++)
{
Write_date(table1);
delay(5);
}
Write_date(table[time_seconds/10]);
delay(5);
Write_date(table[time_seconds%10]);
delay(500);
Write_com(0x01);
}
}
void date_processing()
{
time_hours=sum/3600;
time_minutes=(sum%3600)/60;
time_seconds=(sum%3600)/60;
if(time_hours==24)
{
sum=0;
}
}
void init_zd()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void lcd_pos (unsigned char pos)
{
  Write_com(pos|0x80);
}
void IT_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
x++;
if(x==20)
{
x=0;
sum++;
}
}
void init_lcd()
{
Write_com(0x38);
delay(5);
Write_com(0x0c);
delay(5);
Write_com(0x06);
delay(5);
Write_com(0x01);
delay(5);
}
void Write_com(char com)
{
RS_LCD=0;
RW_LCD=0;
EN_LCD=0;
delay(5);
P2=com;
delay(5);
EN_LCD=1;
delay(5);
EN_LCD=0;
}
void Write_date(unsigned char date)
{
RS_LCD=1;
RW_LCD=0;
EN_LCD=0;
delay(5);
P2=date;
delay(5);
EN_LCD=1;
delay(5);
EN_LCD=0;
}
void delay(unit xms)
{
unit i,j;
for(i=xms;i>0;i--)
for(j=100;j>0;j--)
;
}

你要分两部分去调试  一个是 时钟芯片来的数据 处理成 时分秒 另一个是LCD1602显示程序,写成函数 有参数 这样

P0口有没有接上拉电阻,1602没有用查忙,用了延时,那就要看延时够不够了,增加延时试试。另外就象楼上说的,先调显示,能正确显示想要显示的内容,然后再调时间部分

屏幕能点亮吗?

可以点亮的

显示程序没问题的,那就是时钟问题了吧

可以点亮,看看时钟和读取字库的代码

OK了 解决了 谢谢大家了

找一个调试好的简单程序,测试一下是硬件问题还是软件问题,然后解决。

学习了,看看效果如何

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

网站地图

Top