久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7847|回復: 4
打印 上一主題 下一主題
收起左側

LCD240*64 T6963C單片機驅動程序+電路圖+實物制作

[復制鏈接]
跳轉到指定樓層
樓主
ID:99624 發表于 2015-12-23 01:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
倒班了,能有點在家時間了沒事鼓弄著玩!上傳到51黑電子論壇分享給需要的朋友們。


LCD240*64 T6963C電路圖和單片機連接


這是做出來的實物圖



下面是LCD240*128液晶屏幕T6963C驅動芯片的程序源代碼:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_();

sbit ce=P1^0;           //片選
sbit cd=P1^3;           //命令或數據
sbit rd=P1^4;           //讀
sbit wr=P1^5;           //寫
sbit rst=P1^6;           //復位
//sbit sta0=P2^0;    //測執行命令忙
//sbit sta1=P2^1;    //測讀寫數據忙
//sbit sta2=P2^3;    //測連續寫忙
uint text_size,graphic_size;                        //定義文本區和圖形區寬度
uint text_startaddr,graphic_startaddr;              //文本和圖形土起始位
uint text_startaddr_l,text_startaddr_h;             //定義文本區起始高位低位置
uint graphic_startaddr_l,graphic_startaddr_h;       //定義圖形區首地址
uint *p;                                            //圖片數據指針

uchar code cgtab[]={
//-- 我 --
      0x04,0x0E,0x78,0x08,0x08,0xFF,0x08,0x08,
      0x0A,0x0C,0x18,0x68,0x09,0x0A,0x28,0x10,
      0x80,0xA0,0x90,0x90,0x84,0xFE,0x80,0x90,
      0x90,0x60,0x40,0xA0,0x20,0x14,0x14,0x0C,
//-- 愛 --
      0x00,0x3F,0x11,0x09,0x7F,0x42,0x82,0x7F,
      0x04,0x07,0x0A,0x09,0x10,0x11,0x22,0x0C,
      0x78,0x80,0x10,0x20,0xFE,0x02,0x04,0xF8,
      0x00,0xF0,0x20,0x40,0x80,0x60,0x1C,0x08,
//-- 家 --
      0x02,0x01,0x7F,0x40,0x80,0x3F,0x04,0x1A,
      0x63,0x05,0x19,0x63,0x05,0x19,0x65,0x02,
      0x00,0x00,0xFE,0x02,0x04,0xF8,0x00,0x10,
      0x30,0x40,0x80,0x40,0x30,0x0E,0x04,0x00,
//-- 希 --
      0x08,0x06,0x01,0x06,0x3A,0x02,0xFF,0x04,
      0x08,0x1F,0x28,0xC8,0x08,0x08,0x00,0x00,
      0x30,0xC0,0x00,0xC0,0x38,0x00,0xFE,0x80,
      0x88,0xFC,0x88,0x88,0xA8,0x90,0x80,0x80,
//-- 望 --
      0x10,0x0A,0xFF,0x20,0x20,0x26,0x38,0x20,
      0x00,0x3F,0x01,0x1F,0x01,0x01,0xFF,0x00,
      0x04,0x7E,0x44,0x7C,0x44,0x7C,0x44,0x8C,
      0x00,0xF8,0x00,0xF0,0x00,0x04,0xFE,0x00,
//-- 和 --
      0x02,0x07,0x78,0x08,0x0A,0xFF,0x08,0x18,
      0x1C,0x2A,0x2A,0x48,0x88,0x08,0x08,0x08,
      0x00,0x00,0x00,0x04,0xFE,0x84,0x84,0x84,
      0x84,0x84,0x84,0x84,0xFC,0x84,0x00,0x00,
//-- 睦 --
      0x08,0x7C,0x4B,0x48,0x48,0x78,0x4F,0x49,
      0x4A,0x7C,0x4B,0x48,0x48,0x78,0x4F,0x00,
      0x40,0x48,0xFC,0x40,0x40,0x44,0xFE,0x10,
      0x4C,0x44,0xF8,0x40,0x40,0x44,0xFE,0x00,
//-- 開 --
      0x00,0x7F,0x08,0x08,0x08,0x08,0x08,0xFF,
      0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,
      0x08,0xFC,0x20,0x20,0x20,0x20,0x24,0xFE,
      0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
//-- 心 --
      0x02,0x01,0x00,0x00,0x08,0x08,0x28,0x28,
      0x28,0x48,0x88,0x08,0x08,0x08,0x07,0x00,
      0x00,0x00,0x80,0xC0,0x80,0x00,0x08,0x04,
      0x02,0x02,0x02,0x00,0x10,0x10,0xF0,0x00,
//-- 幸 --
      0x01,0x01,0x3F,0x01,0x01,0xFF,0x08,0x04,
      0x3F,0x01,0x01,0x7F,0x01,0x01,0x01,0x01,
      0x00,0x10,0xF8,0x00,0x04,0xFE,0x20,0x50,
      0xF8,0x00,0x08,0xFC,0x00,0x00,0x00,0x00,
//-- 福 --
      0x20,0x17,0x10,0x03,0xFA,0x0A,0x13,0x38,
      0x57,0x94,0x14,0x17,0x14,0x14,0x17,0x14,
      0x08,0xFC,0x00,0xF8,0x08,0x08,0xF8,0x04,
      0xFE,0x44,0x44,0xFC,0x44,0x44,0xFC,0x04,                                                              
//-- 每 --
      0x10,0x10,0x1F,0x20,0x5F,0x12,0x11,0x10,
      0xFF,0x12,0x21,0x20,0x3F,0x00,0x00,0x00,
      0x00,0x08,0xFC,0x10,0xF8,0x10,0x10,0x14,
      0xFE,0x10,0x10,0x10,0xF8,0x20,0xA0,0x40,
//-- 一 --
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFE,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//-- 天 --
      0x00,0x7F,0x01,0x01,0x01,0x01,0xFF,0x01,
      0x02,0x02,0x04,0x04,0x08,0x10,0x20,0xC0,
      0x08,0xFC,0x00,0x00,0x00,0x04,0xFE,0x00,
      0x80,0x80,0x40,0x40,0x20,0x10,0x0E,0x04,
//-- 。 --
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};                 

/*********************延時函數************************************/
void delay(uint a)
{
        uchar b;
//        uint c;
        for( ;a>0;a--)
         for(b=110;b>0;b--);
}

/*******************寫命令*****************************************/
void wrcomm(uchar comm)
{
        ce=0;                        //選中芯 片
        rd=1;                        //讀高電平無效
        cd=1;           //操作命令
        wr=0;           //寫使能
        P2=comm;         //把命令送給總線
        nop();                        //延時
        wr=1;                        //拉高寫
}

/*******************寫數據******************************************/
void wrdate(uchar date)
{
        ce=0;           //使能片選
        rd=1;                        //讀無效
        cd=0;           //操作命令
        wr=0;           //使能寫
        P2=date;                //數據送給總線
        nop();                        //延時
        wr=1;                        //拉高寫
}

/*******************測讀寫命令忙***********************************/
void check_sta01()
{
    uchar a;    //定義變量
        ce=0;           //使能片選
        wr=1;           //禁寫
        cd=1;           //命令有效
        while(1)                //循環
        {
            P2=0xff;
                rd=0;       //使能讀
                a=P2;       //讀總線狀態
                nop();      //延時
                rd=1;       //拉高讀
                if((a&0x03)==0x03)                  
                return;      //測試如果讀寫數據為不忙跳出循環
        }
}

/*******************測試連續寫忙************************************/
void check_sta03()
{
    uchar a;           //定義變量
        ce=0;                 //全能片選
        wr=1;                 //禁寫
        cd=1;                 //命令有效
        while(1)
        {
                P2=0xff;
                rd=0;                           //使能讀
                a=P2;              //讀總線狀態
                nop();             //延時
                rd=1;              //拉高讀
                if((a&0x08)==0x08)
                return;            //測試如果連續讀為不忙跳出循環
        }
}

/************************寫無參數命令************************************/
void no_parameter(uchar comm)
{
        check_sta01();              //測忙
        wrcomm(comm);            //寫命令
}

/************************寫雙字節參數命令*********************************/
void double_parameter(uint a,uint b,uchar c)
{
        check_sta01();              //測忙
        wrdate(a);               //寫第一字節參數
        check_sta01();              //測忙
        wrdate(b);               //寫第二節節參數
        check_sta01();              //測忙
        wrcomm(c);               //寫命令
}

/************************清屏全亮或全滅***********************************/
void all_display(uchar state,uchar vlue)
{
    uint i,k;                         //定義變量
        if(state==0)                     //判斷state是否為0
        {
                double_parameter(text_startaddr_l,text_startaddr_h,0x24);   //文本區低位和高位起始地址
                no_parameter(0xb0);                                         //連續寫命令
                for(i=1;i<9;i++)
                {
                    for(k=0;k<30;k++)
                        {
                           check_sta03();                                              //測忙
                           wrdate(vlue);
                        }                                              //寫入vlue值,0或1
                }
                check_sta03();                                                                                                 //測忙
                wrcomm(0xb2);                                                                                                 //關連續寫
        }
        if(state==1)                          //判斷state是否為1
        {
                double_parameter(graphic_startaddr_l,graphic_startaddr_h,0x24);    //圖開形區起始低,高位
                no_parameter(0xb0);                                                                                           //連續寫命令
                for(i=30*64;i>0;i--)                                                                                           //循環
                {
                        check_sta03();                                                                                           //測連續寫忙
                        wrdate(vlue);                                                                                           //寫入vlue值
                }
                check_sta03();                                                                                                   //測忙
                wrcomm(0xb2);                                                                                                   // 關閉連續寫
        }
}

/****************************文本方式下寫8*8字符******************************************/
void text_ascii(uchar *addr,uchar hang,uchar lie)
{
        uchar temp;                                                                        //定義變量
        uchar low;                                                                        //定義變量
        uchar high;                                                                        //定義變量
        temp=30*(hang-1)+(lie-1);                                        //每行30字符乘行加列,計算寫入起始位置
        low=temp&0x00ff;                                                        //把結果低位賦給低變量
        high=(temp>>8)&0x00ff;                                                //把結果高位給高變量
        double_parameter(low,high,0x24);                        //寫入文本起始位置
        no_parameter(0xb0);                                                        //連續寫命令
        check_sta03();                                                                //測忙
        wrdate(*addr);                                                                //寫入字符地址指針
        check_sta03();                                                                //測連續寫忙
        wrcomm(0xb2);                                                        //關閉連續寫
}

/**************************graphic下顯示圖片*********************************************/
void display(uchar *p,uchar hang,uchar lie)
{
        uchar m,n;                                                                                         //定義變量
        uint temp;                                           //定義變量
        temp=(hang-1)*30+lie;                                //計算圖形寫入地址
        graphic_startaddr_l=temp&0x00ff;                     //取出低位數據
        graphic_startaddr_h=(temp>>8)&0x00ff;
        double_parameter(graphic_startaddr_l,graphic_startaddr_h,0x24);//寫入圖形首地址
        no_parameter(0xb0);                                                                         //連續寫命令
        for(m=240;m>0;m--)                                                                         //循環行數
        {
                for(n=30;n<0;n--)                                                                 //每字節8位,列數/8
                {
                        check_sta03();                                                                 //測忙
                        wrdate(* p++);                                                                 //寫入圖形指針,然后加1地址
                }
        }
    check_sta03();                                                                                  //測忙
        wrcomm(0xb2);                                                                         //關閉連續寫
}

/************************text下顯示16*16漢字**********************************************
***************text模式下是8*8字符,每個漢字要4個字符組成*********************************/
void hz_display(uchar addr,uchar hang,uchar lie)
{
        uint temp;                                                   //定義變量
        uchar low,high;                                           //定義變量
        temp=30*2*(hang-1)+(lie-1)*2;           //把字的坐標地址賦給變量
        low=temp&0x00ff;                                   //取出坐標低位數值
        high=(temp>>8)&0x00ff;                           //右移8位取出坐標高位數值
        double_parameter(low,high,0x24);   //寫入漢字坐標
        no_parameter(0xb0);                                   //開連續寫
        check_sta03();                                           //測忙
        wrdate(addr);                                           //寫入漢字左上4分之1
        check_sta03();                                           //測試忙
        wrdate(addr+2);                                           //寫入漢字右上4分之1
        check_sta03();                                           //測忙
        wrcomm(0xb2);                                   //關閉連續寫
        delay(1);
        temp=30*2*(hang-1)+30+(lie-1)*2;           //重新計算漢字坐標也就是寫下部份,地址加一行(8*8)
        low=temp&0x00ff;                                   //取出低位數值給變量
        high=(temp>>8)&0x00ff;                           //右移8位取出高位給變量
        double_parameter(low,high,0x24);   //寫入新起始地址(寫漢字下部份)
        no_parameter(0xb0);                                   //連續寫命令
        check_sta03();                                           //測忙
        wrdate(addr+1);                                           //寫入漢字左下4分之1
        check_sta03();                                           //測忙
        wrdate(addr+3);                                           //寫入漢字右下4分之1
        check_sta03();                                           //測忙
        wrcomm(0xb2);                                       //關閉連續寫
}

/******************************自定義漢字寫入CGRAM***************************************/
void cgram()
{
        uint m=0;                                                        //定義變量
        double_parameter(0x07,0x00,0x22);        //設定最高的1K為CGRAM  寄存器偏移設定
        double_parameter(0x00,0x3c,0x24);        //
        no_parameter(0xb0);                                    //開連續寫
        for(m=0;m<480+32;m++)                                        //循環
        {
                check_sta03();                                    //測忙
                wrdate(cgtab[m]);                                //寫入數據           
        }
        check_sta03();                                            //測忙
        wrcomm(0xb2);                                                //關閉連續寫
}

/***************************主程序*******************************************************/
void main()
{


    uchar i;                                                         //定義變量
    rst=0;                                                                 //拉低液晶屏復位腳
        nop();                                                                 //
        nop();
        nop();                                                                 //延時
        rst=1;
        text_size=graphic_size=30*64;                 //文本和圖形區寬度
        text_startaddr=0x0000;                             //文本區首地址
        text_startaddr_l=text_startaddr;           //文本首地址低位
        text_startaddr_h=text_startaddr>>8;           //文本首地址高位

        graphic_startaddr=text_startaddr+text_size;          //圖形區首地址
        graphic_startaddr_l=graphic_startaddr;                  //圖形區首地址低位
        graphic_startaddr_h=graphic_startaddr>>8;          //圖形區首地址高位

        double_parameter(text_startaddr_l,text_startaddr_h,0x40);        //寫入文本首地址
        double_parameter(30,0x00,0x41);                                                                //寫入文本區長度(一行幾個字節)
        double_parameter(graphic_startaddr_l,graphic_startaddr_h,0x42);           //寫入圖形區首地址
        double_parameter(30,0x00,0x43);                                                                                //寫入圖形區長度(一行幾個字節)
                                                                                                                                 
        no_parameter(0x80);                  //文本 或 圖形
        no_parameter(0x98);                  //圖形開文本關
        all_display(1,0xff);           //表屏全亮
        delay(5000);
        no_parameter(0xa7);                  //顯示8行光標
        no_parameter(0x94);                  //文本開圖形關
    cgram();         
//        while(1)         
          all_display(0,0x00);
   {   
        
        for(i=1;i<16;i++)
        {

                hz_display(0x80+(i-1)*4,1,i);
                hz_display(0x80+(i-1)*4,2,i);
                hz_display(0x80+(i-1)*4,3,i);
                hz_display(0x80+(i-1)*4,4,i);  
        }  
        while(1);
   }           
}        



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:288930 發表于 2019-1-28 15:05 | 只看該作者
謝謝分享!
回復

使用道具 舉報

板凳
ID:459530 發表于 2019-3-8 16:17 | 只看該作者
你好
   想請問液晶屏的第4腳V0怎么接的?接負電壓了嗎?
回復

使用道具 舉報

地板
ID:58110 發表于 2020-7-7 16:37 | 只看該作者
謝謝分享
有機會學習學習
回復

使用道具 舉報

5#
ID:1042173 發表于 2023-5-7 21:12 | 只看該作者
sulon 發表于 2019-3-8 16:17
你好
   想請問液晶屏的第4腳V0怎么接的?接負電壓了嗎?

用不上,就空腳
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美v在线观看 | 日韩中文字幕在线观看 | 日韩影院一区 | 一区不卡在线观看 | 日韩中文一区二区三区 | 精品视频一区二区 | 久草精品视频 | 国产av毛片 | 国产区一区二区三区 | 亚洲视频网 | 国产精品二区三区 | 久久久.com | 国产精品久久久久久久一区探花 | 视频在线一区 | 日韩在线欧美 | 精品久久不卡 | 欧美黄色片 | 久久久久国产精品午夜一区 | 久久一二区 | 国产日韩欧美精品一区二区三区 | 国产精品久久久久久一区二区三区 | 青青草一区 | 一区视频在线播放 | 国产精品 亚洲一区 | 在线观看av免费 | 一区二区三区小视频 | 人人草天天草 | 天天草天天 | 中文字幕久久精品 | 久久在线视频 | 国产一区二区三区在线观看免费 | 中文字幕一二三 | 亚洲国产成人av好男人在线观看 | 国产一区二区三区网站 | 亚洲欧美在线免费观看 | 欧美日韩亚洲国产综合 | 国产一区久久 | 国产精品夜间视频香蕉 | 中文字幕日韩欧美一区二区三区 | 老司机久久 | 国产福利资源在线 |