|
MEGA8在8MHz,并口驱动,应该是很简单的程序,搞了几天,却怎么都没显示英文一个字!不要说中文呢。屏是好的,已换过几个了,工作在并口模式,在卖的时候已当场试过,PSB接高电平,请高手帮忙!
#include <mega8.h>
#include <DELAY.h>
#include <stdio.h>
#include <string.h>
typedef unsigned int uint ;
typedef unsigned char uchar;
#define rs PORTC.0 //H=data; L=command;
#define rw PORTC.1 //H=read; L=write;
#define e PORTC.2 //input enable;
//#define psb PORTD.3 //H=并口; L=串口;
#define rst PORTC.4 //Reset Signal 低电平有效
void RDBF(void) //忙判别
{
uchar temp;
DDRD=0x00;
rw=1;
rs=0;
e=0;
delay_us(10);
while(1)
{
e=1;
temp=PIND;
delay_us(10);
e=0;
if((temp&0x80)==0)
break;
}
}
//写数据到指令
void WRCommand(uchar comm)
{
RDBF();
DDRB=0xff;
e=0;
rw=0;
rs=0;
e=1;
PORTD=comm;
delay_us(10);
e=0;
}
//写数据到数据
void WRData(uchar data)
{
RDBF();
DDRB=0xff;
e=0;
rw=0;
rs=1;
e=1;
PORTD=data;
delay_us(10);
e=0;
}
//uchar F1English[]={0x46,0x31,0x2d,0x2d,0x45,0x6e,0x67,0x6c,0x69,0x73,0x68};
uchar F1English[]={"asdfghjkl"};
uchar lengthF1=11;
//初始化 LCD
void LCDInit(void)
{
WRCommand(0x30); //8位并口 ,基本指令
delay_ms(10);
WRCommand(0x06); //光标右移动方向
delay_ms(10);
WRCommand(0x01);
delay_ms(30);
WRCommand(0x0c); //开显示 关游标
delay_ms(10);
WRCommand(0x02); // 地址归零
delay_ms(10);
//屏幕清零
}
//显示英文字符()16*8
void SHowEnglish(uchar addr,uchar *english,uchar count)
{
uchar i;
delay_ms(10);
WRCommand(addr);
for(i=0;i<count;i++)
WRData(english[i]);
}
void main(void)
{
PORTB=0xff;
DDRB=0xFF;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0xFF;
rst=0;
delay_ms(10);
rst=1;
LCDInit();
//SHowEnglish(0x80,"abc",3);//用这句这也不行
delay_ms(1000);
while(1)
{
SHowEnglish(0x80,F1English,lengthF1);
PORTB=~ PORTB;//接LED判别是否运行
delay_ms(100);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|