|
data--接PB3
WR--接PB4
CS接PB5
现在是想全部点亮。。。。可是就是不亮 LCD每个口的电压都为5V.......
#include<iom88v.h>
#include<AVRdef.h>
#define uchar unsigned char
#define BIAS 0x28 // 0010 1000 X 1/2偏置 4com
#define SYSEN 0x01 //开启系统振荡器
#define LCDOFF 0x02 //
#define LCDON 0x03 //
#define RC256K 0x18 ////系统时钟源片内RC振荡
#define DATA_1() PORTB |= BIT(3) //PB3 数据线
#define DATA_0() PORTB &= ~BIT(3) //PB3
#define WR_1() PORTB |= BIT(4) //PB4 时钟线
#define WR_0() PORTB &= ~BIT(4) //PB4
#define CS_1() PORTB |= BIT(5) //PB5 片选线
#define CS_0() PORTB &= ~BIT(5) //PB5
#define nop() asm("nop")
void port_init(void)
{DDRB=0xff;
DDRC=0xff;
DDRD=0xFF;
PORTD=0xaa;
}
void SendBit_1621(uchar data,uchar cnt) //data的高cnt位写入1621
{
uchar i;
for(i=0;i<cnt;i++)
{
WR_0();
if(data&0x80==0) DATA_0();
else DATA_1();
nop();
WR_1(); //给上升沿
data<<=1;
}
}
void SendDataBit_1621(uchar data,uchar cnt) //data的低cnt位写入1621
{
uchar i;
for(i=0;i<cnt;i++)
{
WR_0();
if(data&0x01==0) DATA_0();
else DATA_1();
nop();
WR_1(); //给上升沿
data>>=1;
}
}
void SendCmd(uchar command)
{
CS_0(); //片选
SendBit_1621(0x80,3); //写100 命令模式
SendBit_1621(command,9); //写command命令
CS_1();
}
void Write_1621(uchar addr,uchar data)
{
CS_0();
SendBit_1621(0xa0,3);//写101 写数据模式
SendBit_1621(addr<<2,6);//写6位地址
SendDataBit_1621(data,4);//写data的低4位
}
void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
uchar i;
CS_0();
SendBit_1621(0xa0,3);//写101 数据模式
SendBit_1621(addr<<2,6);//写地址
for(i=0;i<cnt;i++,p++)
SendDataBit_1621(*p,8);
CS_1();
}
void ALL_disp(void)
{
uchar i;
for(i=0;i<31;i++)
{
Write_1621(i,0x00);
}
}
void main(void)
{ port_init();
SendCmd(BIAS); //
SendCmd(SYSEN); //
SendCmd(RC256K); //
SendCmd(LCDON);//
ALL_disp();
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|