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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教單片機+24064液晶屏驅動程序

[復制鏈接]
跳轉到指定樓層
樓主
24064液晶屏,控制芯片是T6963C,用以下程序驅動,超過16個漢字就不顯示了是什么原因,還有就是怎么顯示數字,麻煩大神幫忙修改一下,萬分感謝

#include <C8051F020.h>     // Register definition file.
#include <stdio.h>
#include<intrins.h>
#define SYSCLK   22118400   //定義系統時鐘22.1184MHz
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;

uint text_size,graphic_size;                        //定義文本區和圖形區寬度
uint text_startaddr,graphic_startaddr;              //文本和圖形土起始位
uint text_startaddr_l,text_startaddr_h;             //定義文本區起始高位低位置


uchar code zk[]={
//*"我"*/
         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,

//"開",
      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,

//"快",
      0x10,0x10,0x10,0x10,0x5B,0x54,0x50,0x90,
      0x10,0x1F,0x10,0x11,0x11,0x12,0x14,0x18,
      0x80,0x80,0x80,0x88,0xFC,0x88,0x88,0x88,
      0x88,0xFE,0x80,0x40,0x20,0x10,0x0E,0x04,

//"樂",
      0x00,0x00,0x1F,0x10,0x11,0x11,0x21,0x7F,
      0x01,0x01,0x09,0x09,0x11,0x21,0x45,0x02,
      0x20,0xF0,0x00,0x00,0x00,0x00,0x04,0xFE,
      0x00,0x00,0x20,0x10,0x08,0x0C,0x04,0x00,

//"每",
      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,0x40,0x27,0x24,0x85,0x65,0x25,0x0D,
      0x15,0x25,0xE5,0x21,0x22,0x24,0x28,0x20,
      0x00,0x44,0xE4,0x54,0x54,0x54,0x54,0x54,
      0x54,0x54,0x54,0x04,0x84,0x44,0x54,0x08,

//"試",
      0x00,0x40,0x20,0x20,0x0F,0x00,0xE0,0x27,
      0x21,0x21,0x21,0x21,0x29,0x37,0x22,0x00,
      0x20,0x28,0x24,0x20,0xFE,0x20,0x20,0xE0,
      0x20,0x10,0x10,0x10,0xD2,0x12,0x0A,0x04,

//"液",
      0x00,0x40,0x37,0x10,0x81,0x61,0x22,0x0A,
      0x16,0x2B,0xE2,0x22,0x22,0x22,0x23,0x22,
      0x80,0x44,0xFE,0x20,0x20,0x3C,0x44,0x64,
      0x98,0x48,0x50,0x20,0x50,0x8E,0x04,0x00,

//"晶",
      0x0F,0x08,0x08,0x0F,0x08,0x08,0x0F,0x08,
      0x7E,0x42,0x42,0x7E,0x42,0x42,0x7E,0x42,
      0xE0,0x20,0x20,0xE0,0x20,0x20,0xE0,0x24,
      0xFE,0x84,0x84,0xFC,0x84,0x84,0xFC,0x84,

//"程",
      0x08,0x1D,0xF1,0x11,0x11,0xFF,0x11,0x38,
      0x37,0x54,0x50,0x91,0x10,0x10,0x17,0x10,
      0x04,0xFE,0x04,0x04,0x04,0x04,0xFC,0x00,
      0xFE,0x20,0x28,0xFC,0x20,0x24,0xFE,0x00,

//"序",
      0x01,0x00,0x3F,0x20,0x2F,0x20,0x21,0x20,
      0x2F,0x20,0x20,0x20,0x40,0x40,0x82,0x01,
      0x00,0x88,0xFC,0x00,0xF8,0x20,0x40,0x80,
      0xFC,0x88,0x90,0x80,0x80,0x80,0x80,0x00,

//"非",
      0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x7C,
      0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,
      0x40,0x40,0x44,0x7E,0x40,0x40,0x48,0x7C,
      0x40,0x40,0x40,0x44,0x7E,0x40,0x40,0x40,

//"常",
      0x01,0x11,0x09,0x7F,0x40,0x8F,0x08,0x0F,
      0x01,0x1F,0x11,0x11,0x11,0x11,0x01,0x01,
      0x00,0x10,0x20,0xFE,0x02,0xE4,0x20,0xE0,
      0x10,0xF8,0x10,0x10,0x10,0x50,0x20,0x00,

//"感",
      0x00,0x00,0x7F,0x40,0x7F,0x40,0x5F,0x51,
      0x51,0x5F,0x90,0x02,0x29,0x28,0x48,0x07,
      0x50,0x48,0xFC,0x40,0xC0,0x48,0x48,0x50,
      0x22,0x52,0x8E,0x00,0x90,0xAC,0x24,0xE0,

//"謝",
      0x02,0x44,0x2F,0x28,0x0F,0x08,0xEF,0x28,
      0x28,0x3F,0x21,0x2A,0x34,0x28,0x12,0x01,
      0x08,0x88,0xC8,0x88,0x88,0xFE,0x88,0x88,
      0xC8,0xA8,0xA8,0x88,0x88,0x88,0xA8,0x10
};                 


//外部晶振初始化/////////////////////////////
void SYSCLK_Init ()
{
    int i;                    // 延時計數器
    OSCXCN = 0x67;            // 開啟外部振蕩器22.1184MHz晶體
    for (i=0; i < 256; i++) ; // 等待振蕩器啟振
    while (!(OSCXCN & 0x80)); // 等待晶體振蕩器穩定
    OSCICN = 0x88;            // 選擇外部振蕩器為系統時鐘源并允許丟失時鐘檢測器
}


//  交叉開關配置,管腳輸入輸出配置
void XBR_Init()
{
        XBR0 = 0x00;        //不配置特殊功能
        XBR1 = 0x00;        
        XBR2 = 0x40;        //使能交叉開關,并且總體弱上拉
        P74OUT=0xff;
}        





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

/*******************寫命令*****************************************/
void wrcomm(uchar comm)
{

        P4=P4|0x01 <<1;          //讀高電平無效
                delay(5);
                P4=P4|0x01 <<3;         //操作命令
                delay(5);
                P4=P4&~(0x01 <<0); //寫使能
                delay(5);
                P5=comm;         //把命令送給總線
        delay(5);                        //延時
        P4=P4|0x01 <<0;                        //拉高寫
}

/*******************寫數據******************************************/
void wrdate(uchar date)
{

                                //讀無效
        P4=P4|0x01 <<1;
                delay(5);
                P4=P4&~(0x01 <<3);//操作命令
                delay(5);
                P4=P4&~(0x01 <<0);//使能寫
                delay(5);
                P5=date;         //數據送給總線
        delay(5);        
        P4=P4|0x01 <<0;   //拉高寫
}

/*******************測讀寫命令忙***********************************/
void check_sta01()
{
    uchar a;    //定義變量

                           
        P4=P4|0x01 <<0;  //禁寫
                delay(5);
                P4=P4|0x01 <<3;         //命令有效
                delay(5);
                while(1)  
        {
            P5=0xff;
            delay(5);
                        P4=P4&~(0x01 <<1); //使能讀
                        delay(5);
                        a=P5;       //讀總線狀態
            delay(5);       //延時
            P4=P4|0x01 <<1;//拉高讀
                        delay(5);
                        if((a&0x03)==0x03)                  
                return;      //測試如果讀寫數據為不忙跳出循環
        }
}

/*******************測試連續寫忙************************************/
void check_sta03()
{
    uchar a;           //定義變量


        P4=P4|0x01 <<0;//禁寫
                delay(50);
                P4=P4|0x01 <<3;        //命令有效
                delay(5);
                while(1)
        {
                P5=0xff;
                delay(5);
                            P4=P4&~(0x01 <<1); //使能讀
                                delay(5);
                                a=P5;              //讀總線狀態
                delay(5);             //延時
                P4=P4|0x01 <<1; //拉高讀
                                delay(5);
                                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
        {
                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);  //關閉連續寫
}


/************************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(zk[m]); //寫入數據           
        }
        check_sta03();  //測忙
        wrcomm(0xb2);  //關閉連續寫
}

/***************************主程序*******************************************************/
void main()
{
        uchar i;
           WDTCN = 0xde;
        WDTCN = 0xad;   //禁止看門狗定時器
        XBR_Init();
        SYSCLK_Init();


        P4=P4&~(0x01 <<4); //拉低液晶屏復位腳
            delay(10);    //延時                                                            
        P4=P4|0x01 <<4;
                delay(10);
                text_size=graphic_size=30*64;   //文本和圖形區寬度
        text_startaddr=0x0000;  //文本區首地址
        text_startaddr_l=text_startaddr;  //文本首地址低位
        text_startaddr_h=text_startaddr>>8;  //文本首地址高位

        double_parameter(text_startaddr_l,text_startaddr_h,0x40);  //寫入文本首地址
        double_parameter(30,0x00,0x41);                                                                //寫入文本區長度(一行幾個字節)
        double_parameter(30,0x00,0x43);                                                                                //寫入圖形區長度(一行幾個字節)


       // no_parameter(0xa7);                  //顯示8行光標
        no_parameter(0x94);                  //文本開圖形關
                   cgram();         
              all_display(0,0x00);        //清平
                       
        
                hz_display(0x80+(0)*4,4,2);         //(第幾個字,行地址,列地址)
                hz_display(0x80+(1)*4,4,3);
                hz_display(0x80+(2)*4,4,4);
                hz_display(0x80+(3)*4,4,5);
                hz_display(0x80+(4)*4,4,6);
                hz_display(0x80+(5)*4,4,7);
                hz_display(0x80+(6)*4,4,8);
                hz_display(0x80+(7)*4,4,9);
                hz_display(0x80+(8)*4,4,10);
                hz_display(0x80+(9)*4,4,11);
                hz_display(0x80+(10)*4,4,12);
                hz_display(0x80+(11)*4,4,13);
                hz_display(0x80+(12)*4,4,14);  
                   hz_display(0x80+(13)*4,2,5);
                hz_display(0x80+(14)*4,2,6);
                hz_display(0x80+(15)*4,2,7);
        
                hz_display(0x80+(16)*4,2,7); //下面這四行就不顯示了
                hz_display(0x78+(17)*4,2,9);
                hz_display(0x76+(18)*4,2,10);
                hz_display(0x76+(19)*4,2,11);  

        while(1);

}

顯示效果如圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:748788 發表于 2020-10-20 08:13 | 只看該作者
如果是新買的,賣家應該提供驅動和例程;如果是二手的就不好說了
回復

使用道具 舉報

板凳
ID:33455 發表于 2020-10-20 09:35 | 只看該作者
這個是拆機的屏想拿來學習呢
回復

使用道具 舉報

地板
ID:414556 發表于 2020-10-20 10:21 | 只看該作者
要想顯示多字就把字改小些,網上有編碼軟件。數字要跟漢字一樣建庫。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天色天天射天天干 | 欧美亚洲国产一区二区三区 | 天天干天天想 | 黄网站免费观看 | 国产伦精品一区二区三区四区视频 | 精品免费视频 | 99久久日韩精品免费热麻豆美女 | 91精品国产色综合久久 | 欧美视频1区 | 伊人久久免费 | 欧美一区视频 | 九九热在线免费观看 | 最新国产精品精品视频 | 中文字幕在线一区 | 精久久久| 久久9久 | 精品九九 | 999精品视频在线观看 | 男女下面一进一出网站 | www.日本三级 | 亚洲欧美在线视频 | 日韩成人在线免费观看 | 尤物视频在线免费观看 | www.日日操 | 国产欧美精品区一区二区三区 | 欧美一a一片一级一片 | 亚洲一区中文字幕在线观看 | 中文字幕精品一区二区三区精品 | 精品乱码一区二区三四区 | 日韩欧美国产精品 | 国产a爽一区二区久久久 | 可以免费观看的av | 激情六月丁香 | 国产日韩一区二区三区 | 久久久久久国产精品三区 | 人人干人人草 | 国产一区视频在线 | 亚洲成人动漫在线观看 | 狠狠干天天干 | 一区二区三区国产好 | 国产成人精品999在线观看 |