智能车制作
标题:
1602显示问题
[打印本页]
作者:
mllen858585
时间:
2010-11-17 11:21
标题:
1602显示问题
谁有XS128控制1602液晶的程序,有的发上来看看,,,,弄了两天了,没调试出来。。。。。。。
作者:
leihen0525
时间:
2010-11-18 09:15
呵呵 你也在弄呀 告诉你一个秘密 那个1602 有问题 所以我换成12864 的屏了 呵呵 努力吧 希望你能搞定那个1602 我在51上也试了 居然只能显示一行 换了2个了还是不行 很是郁闷啊
作者:
mllen858585
时间:
2010-11-18 09:23
回复
2#
leihen0525
关键是我的1602在线调试他能显示,但是不知道为什么他显示一个字符空一个位,再显示别外一个字符,好郁闷,我把程序发上来,有解决的希望能跟我说下。。。
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define rs PORTE_PE2
#define rw PORTE_PE3
#define ep PORTE_PE4
#define P0 PORTB
unsigned char dis1[] = {"www.hificat.com"};
unsigned char dis2[] = {"0571-85956028"};
unsigned char temp,result;
int d;
/*延时函数*/
void delay_us(unsigned int n) //延时 如果需要高精度延时 请嵌入汇编
{
if (n == 0)
{
return ;
}
while (--n);
}
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
}
}
}
void delay1(long d){
while(d--)
_asm(nop);
}
unsigned char lcd_bz(void)
{unsigned char temp;
PORTB=0XFF;
DDRB=0X00;
rs = 0;
rw = 1;
ep = 1;
_asm(nop);
_asm(nop);
_asm(nop);
temp=PORTB;
_asm(nop);
_asm(nop);
_asm(nop);
ep = 0;
result=temp&0x80;
DDRB=0XFF;
return result;
}
/***********************
unsigned char LCD_read_state(void)
{
DDRB=0x00;
rs=0;
rw=1;
ep=1;
delay_us(1);
temp=P0;
ep=0;
DDRB=0xff;
return temp;
}
void Wait_busy(void)
{unsigned char temp1;
temp1=LCD_read_state();
temp1=temp1&0x80;
while(temp1)
{
temp1=LCD_read_state();
temp1=temp1&0x80;
}
}
******************/
void lcd_wcmd(unsigned char cmd)
{
while(lcd_bz());//判断LCD是否忙碌
//Wait_busy();
rs = 0;
rw = 0;
ep = 0;
_asm(nop);
_asm(nop);
PORTB = cmd;
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
ep = 1;
delay1(2);
ep = 0;
}
void lcd_pos(unsigned char pos)
{
lcd_wcmd(pos | 0x80);
delay1(1);}
void lcd_wdat(unsigned char dat)
{
while(lcd_bz());//判断LCD是否忙碌
//Wait_busy();
rs = 1;
rw = 0;
ep = 0;
PORTB = dat;
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
ep = 1;
//delay_us(30);
delay1(2);
ep = 0;
}
void lcd_init()
{
lcd_wcmd(0x38);
lcd_wcmd(0x02);
lcd_wcmd(0x0c);
lcd_wcmd(0x06);
lcd_wcmd(0x01);
delay1(500);
}
void main(void)
{unsigned char i;
DDRE=0XFF;
lcd_init();// 初始化LCD
while(1){
lcd_pos(0x01);//设置显示位置
i = 0;
while(dis1[i]!='\0')
{
lcd_wdat(dis1[i]);//显示字符
i++;
}
lcd_pos(0x41);// 设置显示位置
i = 0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]);// 显示字符
i++;
}
}
}
复制代码
作者:
leihen0525
时间:
2010-11-21 15:30
你的程序没问题[attach]3980[/attach]
作者:
mashilin4
时间:
2011-8-4 09:52
回复
2#
leihen0525
51的晶振频率以及时钟周期和xs128都不一样
xs128比51快了很多 把 延时和时序改一改就好用了
作者:
jack_channel
时间:
2011-8-11 05:02
回复
1#
mllen858585
建议楼主换nokia5110,1602已经落后了,又贵,不能显示中文
作者:
yankunliying
时间:
2013-6-14 17:42
leihen0525 发表于 2010-11-21 15:30
你的程序没问题
我用的他的 没有显示 请问你能给个解释吗
作者:
【风】
时间:
2013-8-11 11:14
leihen0525 发表于 2010-11-21 15:30
你的程序没问题
我的没反应
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2