CodeMonkey 发表于 2013-1-14 12:59:54

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:40

时序有问题,再看看时序图

CodeMonkey 发表于 2013-1-17 10:53:10

明天你好 发表于 2013-1-16 21:42 static/image/common/back.gif
时序有问题,再看看时序图

解决了,是PINA读取,写错了.
页: [1]
查看完整版本: LCD1602无法工作,自己写的源代码,求助.