搜索
bottom↓
回复: 5

请教马潮老师和各位大虾megal6控制TS19264B_2遇到的问题

[复制链接]

出0入0汤圆

发表于 2010-3-15 21:58:21 | 显示全部楼层 |阅读模式
最近在做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);
}

出0入0汤圆

 楼主| 发表于 2010-3-23 15:24:51 | 显示全部楼层
各位大虾 没意见吗?还是实在无语

出0入0汤圆

发表于 2010-3-23 18:56:59 | 显示全部楼层
我确实是实在无语了,不想多说什么。

出0入0汤圆

 楼主| 发表于 2010-3-23 19:56:26 | 显示全部楼层
sorry
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 08:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表