|
最近在做megal6控制液晶lcd19264B_2 由于找不到类似的源程序 而且我发现Profess里面没有19264的液晶模块作仿真 所以直接用马潮老师那块51电路板和液晶实物上测试 程序是用12864移植的 对比了12864和19264液晶的指令代码 高低电平 一致的 但实际电路上只有背光能亮
我总结了几个问题
1.12864程序能直接移植吗?
2.我cs3脚是空接的
3.用双龙那个烧录器的熔丝设置我觉得可能有问题,但本人对那设置不太了解
附上 12864程序 请各位做过这个的或有这方面资料的大虾帮下忙 谢谢了
主体#include <mega16.h>
#define uchar unsigned char
#define uint unsigned int
#define bool unsigned char
#define true 1
#define false 0
#define setbit(sfr,bit) (sfr|=(1<<bit))
#define clrbit(sfr,bit) (sfr&=~(1<<bit))
#define DI 0
#define RW 1
#define CS1 2
#define CS2 3
#define E 4
#define RST 5
#define DATA PORTB
#define CTRL PORTC
void init(void);
uchar getState(void); //得到LCD状态字
bool lcdBusy(void);
void lcdCommand(uchar command); //发送命令字
void lcdOpen(void); //打开LCD
void lcdStartLine(uchar line); //设置起始行
void lcdSetPage(uchar page); //设置页地址
void lcdSetRow(uchar row); //设置列地址
void lcdWrite(uchar dat,uchar cs); //写显示数据,注'0'亮'1'暗
uchar lcdRead(uchar cs); //读数据
void pixel(uchar x,uchar y); //画点
int main(void)
{
init();
lcdOpen();
lcdStartLine(0);
lcdSetPage(0);
lcdSetRow(0);
pixel(30,30);
pixel(100,50);
pixel(15,40);
while(1)
{
}
return 0;
}
void init()
{
PORTB=0xff;
DDRB=0xff;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0xff;
}
uchar getState()
{
PORTB=0xff;
DDRB=0x0;
clrbit(CTRL,CS1);
clrbit(CTRL,CS2);
clrbit(CTRL,DI);
setbit(CTRL,RW);
setbit(CTRL,E); //下降沿
clrbit(CTRL,E);
return PINB;
}
bool lcdBusy()
{
uchar state=0;
state=getState();
if(state&0x80)
{ //BUSY
return true;
}
else
{ //idle
return false;
}
}
void lcdCommand(uchar command)
{
DDRB=0xff;
clrbit(CTRL,CS1);
clrbit(CTRL,CS2);
clrbit(CTRL,DI);
clrbit(CTRL,RW);
DATA=command;
setbit(CTRL,E); //下降沿
clrbit(CTRL,E);
}
void lcdOpen()
{
while(lcdBusy());
lcdCommand(0x3f);
}
void lcdStartLine(uchar line)
{
line|=0xc0;
while(lcdBusy());
lcdCommand(line);
}
void lcdSetPage(uchar page)
{
page&=0x7;
page|=0xb8;
while(lcdBusy());
lcdCommand(page);
}
void lcdSetRow(uchar row)
{ //设置列地址
row&=0x3f;
row|=0x40;
while(lcdBusy());
lcdCommand(row);
}
void lcdWrite(uchar dat,uchar cs)
{ //写显示数据
while(lcdBusy());
DDRB=0xff;
if(cs==1)
{ //选择左半屏
clrbit(CTRL,CS1);
setbit(CTRL,CS2);
}
else
{ //选择右半屏
clrbit(CTRL,CS2);
setbit(CTRL,CS1);
}
setbit(CTRL,DI);
clrbit(CTRL,RW);
DATA=dat;
setbit(CTRL,E); //下降沿
clrbit(CTRL,E);
}
uchar lcdRead(uchar cs)
{ //读数据
uchar dat;
while(lcdBusy());
DDRB=0x00;
PORTB=0xff;
if(cs==1)
{ //选择左半屏
clrbit(CTRL,CS1);
setbit(CTRL,CS2);
}
else
{ //选择右半屏
clrbit(CTRL,CS2);
setbit(CTRL,CS1);
}
setbit(CTRL,DI);
setbit(CTRL,RW);
setbit(CTRL,E); //下降沿
clrbit(CTRL,E);
setbit(CTRL,E); //高
dat=PINB;
return dat;
}
void pixel(uchar x,uchar y)
{
uchar page,dX,dY;
uchar cs=2;
uchar dot=0;
if(x>=64)
{
x-=64;
}
else
{
cs=1;
}
dX=x; //算出x坐标
page=y/8; //算出页号
dY=y%8; //算出y坐标
lcdSetPage(page);
lcdSetRow(dX);
dot=lcdRead(cs);
clrbit(dot,dY);
lcdSetPage(page);
lcdSetRow(dX);
lcdWrite(dot,cs);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|