找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1166|回复: 4
收起左侧

单片机+T6963C的240 128显示程序哪里错了,显示不出来!谢谢

[复制链接]
ID:508561 发表于 2019-6-21 08:29 | 显示全部楼层 |阅读模式
#include <avr/io.h>
#define uchar unsigned char
#define uint unsigned int
//LCD命令
#define LCD_CGR 0x22                //设置CGRAM偏移地址
#define LCD_dizhizhizhen 0x24        //设置地址指针
#define LCD_WenBen_qishi 0x40        //设置文本区起始地址
#define LCD_WenBen_kuandu 0x41        //设置文本区宽度
#define LCD_TuXing_qishi 0x42        //设置图形区起始地址
#define LCD_TuXing_kuandu 0x43        //设置图形区宽度
#define LCD_LuoJi_huo 0x80        //逻辑“或”模式
#define LCD_WenBen_texing 0x83        //文本特性模式
#define LCD_guanbixianshi 0x90        //关闭显示
#define LCD_xieshezhi 0xb0        //数据自动写设置
#define LCD_duxiejieshu 0xb2        //数据自动读/写结束
#define LCD_ShuJuJia_xie 0xc0        //数据写,地址加1
#define LCD_ShuJuJia_du 0xc1        //数据读,地址加1
#define LCD_ShuJuSame_xie 0xc4        //数据写,地址不变


//设置控制位置
#define WR PORTA4
#define RD PORTA5
#define CD PORTA6
#define CE PORTA7
#define LED PORTB1


void delay()
{
        uchar i,j;
        for(i=0;i<256;i++)
        {
                for (j=0;j<256;j++)
                {
                        ;
                }
        }
}



//端口初始化
void Init_IO(void)
{        
        DDRA=0xf8;                        //A0.A1.A2输入,其余输出
        PORTA=0xf0;                        //0B 11110000
        DDRB=0xd6;                        //B2.B3.B4输入,其余输出
        PORTB=0x06;                        //0B 00000011
        //DDRD=
        //PORTD=
        DDRC=0xff;
        PORTC=0x00;
}


unsigned char a_456[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void LCD_STA01_CHECK(void)
{
        DDRC=0x00;                        //方向输入
        PORTA|=(1<<CD);                        //CD=1
        PORTA&=~(1<<RD);                //RD=0
        PORTA&=~(1<<WR);                //WR=0;
        while((PINA&0x03)!=0x03);
        //'NOP'();
        delay();
        PORTA|=(1<<RD);                        //RD=1
        DDRC=0xFF;                        //切换输出
}



//STA3状态检查
void LCD_STA3_CHECK(void)
{
        DDRC=0x00;                        //方向输入
        PORTA|=(1<<CD);                        //CD=1
        PORTA&=~(1<<RD);                //RD=0
        while((PINA&0x08)!=0x08);
        delay();
        PORTA|=(1<<RD);                        //RD=1
        DDRC=0xFF;                        //切换输出
}



//写命令
void Wr_Com(uchar com)
{
        //LCD_STA01_CHECK();                //检查STA01
        PORTA|=(1<<CD);                        //CD=1
        PORTA&=~(1<<CE);
        PORTA|=(1<<RD);
        PORTA&=~(1<<WR);
        PORTC=com;                        //
        delay();
        PORTA|=(1<<WR);                //WR=1
        PORTA|=(1<<CE);
}




//写数据
void Wr_Data(uchar data)
{
        //LCD_STA01_CHECK();                //检查STA01
        PORTA&=~(1<<CD);                //CD=0
        PORTA&=~(1<<CE);
        PORTA|=(1<<RD);
        PORTA&=~(1<<WR);
        PORTC=data;
        delay();
        PORTA|=(1<<WR);                //WR=0
        PORTA|=(1<<CE);
}




//写两个命令
void Wr_Com2(uchar data,uchar com)
{
        Wr_Data(data);
        Wr_Com(com);
}


//写三个命令
void Wr_Com3(uchar data1,uchar data2,uchar com)
{
        Wr_Data(data1);
        Wr_Data(data2);
        Wr_Com(com);
}


        //写字符
void Wr_Char(uchar x,uchar y,uchar *data)
{
        uint i;
        uchar ADD;
        ADD=x*30+y;                                        //地址公式
        for(i=0;i<16;i++)
        {
                Wr_Com3(ADD,ADD>>8,0x24);                //定位地址
                Wr_Com2(*data,0xc4);                        //写数据,位置不变
                ADD+=30;
        }
}


//写文字
void Wr_TXT(uchar x,uchar y,uchar data)
{
        uint i;
        uchar ADD;
        ADD=x*30+y;                                        //地址公式
        for(i=0;i<16;i++)
        {
                Wr_Com3(ADD,ADD>>8,0x24);                //定位地址
                Wr_Com2(data,0xc4);                        //写数据,位置不变
                ADD+=30;
        }
        for(i=0;i<16;i++)
        {
                Wr_Com3(ADD,ADD>>8,0x24);                //定位地址
                Wr_Com2(data,0xc0);                        //写数据,位置+1
                ADD+=30;
        }
}



        //清屏
void Screen_Clear(void)
{
        uint i;
        Wr_Com3(0x00,0x00,0x24);                        //设置从地址00开始
        for(i=0;i<3840;i++)                                //点清零,一共清3840个点
        {
                Wr_Com2(0x55,0xc0);                        //一个一个清零
                        
        }
}

回复

使用道具 举报

ID:508561 发表于 2019-6-21 08:29 | 显示全部楼层
mega16的芯片
回复

使用道具 举报

ID:508561 发表于 2019-6-21 08:32 | 显示全部楼层
//屏幕初始化
void Init_Lcd(void)
{
        Wr_Com3(0x00,0x00,0x40);                        //文本位置
        Wr_Com3(0x00,0x00,0x42);                        //图形起始位置
        Wr_Com3(30,0x00,0x41);                                //文本宽度
        Wr_Com3(30,0x00,0x43);                                //图形宽度
        Wr_Com3(0x1c,0x00,0x22);
        Wr_Com(0x80);                                        //逻辑或
}


int main(void)
{  
        Init_IO();
        //Init_Lcd();
        //Screen_Clear();
        //Wr_Char(10,20,a_456);
        while (1)
        {
                PORTC=0x00;
                //Wr_Com3(0x1c,0x00,0x22);
                delay();
                PORTC=0xff;
                delay();
        }
}


C口波形也没有
回复

使用道具 举报

ID:478073 发表于 2019-6-21 13:43
你是说你要这玩意的代码?你咋不量说呢,硬盘昨天 刚挂!!!
0001.jpg
002.jpg

ID:508561 发表于 2019-6-24 11:48 | 显示全部楼层
不知道错哪了
回复

使用道具 举报

ID:198286 发表于 2019-11-16 16:54 | 显示全部楼层
我也搞了两块这屏,研究下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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