LCD1602无法工作,自己写的源代码,求助.
本帖最后由 CodeMonkey 于 2013-1-14 13:01 编辑另外要请教一个问题,AS6怎么软件仿真。/*
* LCD1602_C.c
*
* Created: 2013/1/14 11:23:45
*Author: Tater
*/
#include <avr/io.h>
#include <util/delay.h>
#define RS 0
#define RW 1
#define E2
void Busy(){
DDRA = 0xFF;
PORTA = 0xFF;
DDRB |= (1<<E)|(1<<RW)|(1<<RS);
PORTB =(PORTB & (~(1<<RS))) | (1<<RW);//RS = 0,RW = 1
while (PORTA & 0x80)
{
PORTB &= (~(1<<E));//E = 0
PORTB |= (1<<E);//E = 1
}
PORTB &= (~(1<<E));//E = 0
}
void WriteCommand(unsigned char btCommand){
Busy();
PORTB = (PORTB & (~(1<<RS)|(1<<RW))) | (1<<E);//RS = 0 RW = 0 E = 1
PORTA = btCommand;
PORTB &= (~(1<<E));//E = 0
}
void WriteData(unsigned char btData){
Busy();
PORTB = (PORTB & (~(1<<RW))) | (1<<RS) | (1<<E);//RS = 1 RW = 0 E = 1
PORTA = btData;
PORTB &= (~(1<<E));//E = 0
}
void Init(){
DDRA = 0xFF;
PORTB &= (~(1<<E));//E = 0
WriteCommand(0x38);
_delay_ms(10);
WriteCommand(0x0c);
_delay_ms(10);
WriteCommand(0x01);
_delay_ms(10);
WriteCommand(0x06);
_delay_ms(10);
}
int main(void)
{
Init();
while(1)
{
WriteCommand(0x80);
WriteData('a');
}
} 时序有问题,再看看时序图 明天你好 发表于 2013-1-16 21:42 static/image/common/back.gif
时序有问题,再看看时序图
解决了,是PINA读取,写错了.
页:
[1]