我将51单片机上的1602程序移植到atm 16上面。现在的问题是,初始化可以,光标正常闪烁。但是就是不能显示字符。希望大家帮我看看,下面是我的代码。谢谢。
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar dis1[] = {"1234567"};
void delay(uchar z)
{
uchar j;
while(z--)
for(j=110;j>0;j--);
}
void Delayms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
// sbit rs=P2^6;
//sbit rw=P2^5;
// sbit en=P2^7;
// sbit LCD=P0;
void busy()// 测忙
{
//P0=0xff;
PORTC&=~BIT(6);
delay(1);
PORTC|=BIT(5);
PORTC|=BIT(7);
while(PORTA&0X80);//判断最高位D7是否为1
PORTC&=~BIT(7);
}
//写命令函数
void LCDWCom(uint com)
{
busy();
PORTC&=~BIT(6);
//delay(1);
PORTC&=~BIT(5);
PORTA=com;
PORTC=BIT(7);
Delayms(1);
PORTC&=~BIT(7);
}
void LCDWriteCom(uint com)
{
busy();
PORTC&=~BIT(6);
delay(1);
PORTC&=~BIT(5);
PORTA=com;
// P0=(com&0x0f) << 4;
PORTC|=BIT(7);
Delayms(1);
PORTC&=~BIT(7);
PORTA=(com&0x0f) << 4;
//P0=com;
PORTC|=BIT(7);
Delayms(1);
PORTC&=~BIT(7);
}
//写数据
void LCDWriteByte(uint dat)
{
busy();
PORTC|=BIT(6);
delay(1);
PORTC&=~BIT(5);
PORTA=dat;
PORTC|=BIT(7);
Delayms(10);
PORTC&=~BIT(7);
PORTA=(dat&0x0f)<<4;
PORTC|=BIT(7);
Delayms(20);
PORTC&=~BIT(7);
}
//初始化
void LCDInit()
{
// LCDWriteCom(0x);
LCDWCom(0x28);
Delayms(10);
// LCDWriteCom(0x28);
delay(1);
// Delayms(5);
LCDWriteCom(0x0f);
delay(1);
// Delayms(5);
LCDWriteCom(0x06);
// Delayms(5);
delay(1);
LCDWriteCom(0x01);
// Delayms(5);
// LCDWriteCom(0x80);
}
void main()
{
uchar i,m=3;
DDRA=0xff;
DDRC|=BIT(5)|BIT(6)|BIT(7);
busy();
LCDInit();
LCDWriteCom(0x80);
//delay(5); //Y是行
//for(i=0;dis1[i]!='\0';i++)
//{
LCDWriteByte(dis1[0]);
delay(10); //实现字体渐出的效果
//}
while(1);
} |