怎么在AVR128 上 显示不出东西来啊
#include "LCD12864.h"
#include <iom128v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define RS (1<<0)
#define RW (1<<1)
#define EN (1<<2)
void s_ms(uint ms)
{
for(;ms>1;ms--);
}
uchar table4[]={"PSOC3 LCD12864"};
uchar table5[]={"Serial Driver"};
uchar table6[]={"kk5290122 write"};
uchar table7[]={"in 2013-01-13 "};
/*串行写数据到LCD*/
void LCD_Serial_Send_Data(uchar serial_data)
{
uchar i,in_data; //
in_data=0xfa; //发送写数据控制命令
PORTC|=RS; //RS=1
for(i=0;i<8;i++) //发送第1个字节,将8位控制命令由高到低1位1位的送到串行数据端
{
PORTC&=~EN; //EN=0
PORTC&=~RW;//RW=0
PORTC|=EN; //EN=1
in_data=in_data<<1; //数据左移1位
}
in_data=serial_data;
in_data&=0xf0; //取要发送数据命令的高4位
for(i=0;i<8;i++) //发送第2个字节,将8位数据的高4位由高到低1位1位的送到串行数据端
{
PORTC&=~EN; //EN=0
PORTC&=~RW;//RW=0
PORTC|=EN; //EN=1
in_data=in_data<<1; //数据左移1位
}
in_data=serial_data; //
in_data<<=4; //左移4位,取要发送数据命令的低4位
for(i=0;i<8;i++) //发送第3个字节,将8位数据的低4位由高到低1位1位的送到串行数据端
{
PORTC&=~EN; //EN=0
PORTC&=~RW;//RW=0
PORTC|=EN; //EN=1
in_data=in_data<<1; //数据左移1位
}
PORTC|=RS; //RS=1
s_ms(10); //延时10ms
}
/*串行写指令到LCD*/
void LCD_Serial_Send_Command(uchar serial_cmd)
{
uchar i,in_data; //
in_data=0xf8; //发送写指令控制命令
PORTC&=~RS; //RS=0
for(i=0;i<8;i++) //发送第1个字节,将8位控制命令由高到低1位1位的送到串行数据端
{
PORTC&=~EN; //EN=0
PORTC&=~RW;//RW=0
PORTC|=EN; //EN=1
in_data=in_data<<1; //数据左移1位
}
in_data=serial_cmd;
in_data&=0xf0; //取要发送指令命令的高4位
for(i=0;i<8;i++) //发送第2个字节,将8位指令数据的高4位由高到低1位1位的送到串行数据端
{
PORTC&=~EN; //EN=0
PORTC&=~RW;//RW=0
PORTC|=EN; //EN=1
in_data=in_data<<1; //数据左移1位
}
in_data=serial_cmd; //
in_data<<=4; //左移4位,取要发送指令命令的低4位
for(i=0;i<8;i++) //发送第3个字节,将8位指令数据的低4位由高到低1位1位的送到串行数据端
{
PORTC&=~EN; //EN=0
PORTC&=~RW;//RW=0
PORTC|=EN; //EN=1
in_data=in_data<<1; //数据左移1位
}
PORTC&=~RS; //RS=0
s_ms(10); //延时10ms
}
void LCD_Init(void)
{
LCD_Serial_Send_Command(0x30); //基本指令操作
s_ms(5);
LCD_Serial_Send_Command(0x0c); //显示开,关光标
s_ms(5);
LCD_Serial_Send_Command(0x01); //清除液晶显示
s_ms(5);
}
void main(void)
{
uchar i;
DDRA=0xff;
PORTA=0xff;
DDRC=0xff;
PORTC=0xff;
DDRD=0xff;
PORTD=0x00;
s_ms(1000); //延时1s
LCD_Init();
for(;;)
{
//设置液晶第1行的显示内容
LCD_Serial_Send_Command(0x80);
i=0;
while(table4[i]!='\0')
{
LCD_Serial_Send_Data(table4[i]);
i++;
}
//设置液晶第2行的显示内容
LCD_Serial_Send_Command(0x90);
i=0;
while(table5[i]!='\0')
{
LCD_Serial_Send_Data(table5[i]);
i++;
}
//设置液晶第3行的显示内容
LCD_Serial_Send_Command(0x88);
i=0;
while(table6[i]!='\0')
{
LCD_Serial_Send_Data(table6[i]);
i++;
}
//设置液晶第4行的显示内容
LCD_Serial_Send_Command(0x98);
i=0;
while(table7[i]!='\0')
{
LCD_Serial_Send_Data(table7[i]);
i++;
}
while(1);
}
}
|