欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機16*16漢字點陣滾動如何增加按鍵控制功能

[復制鏈接]
跳轉到指定樓層
樓主
ID:458326 發表于 2018-12-30 12:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*-----------------------------------------------
  名稱:16x16漢字屏流動顯示
  修改:無
  硬件:LY-51S V4.0 單片機開發板
  內容:
        P1.0-P1.3分別連接A、B、C、D,用于控制16行,通過2路HC138控制
                SER接P1.4 通過2片HC595控制
        CLK時鐘連接P1.5
        LAT鎖存連接P1.6
                OE接P1.7

  現象:使用普通速度51系列單片機。1個漢字顯示屏,向左流動顯示多個漢字,重復循環顯示。
------------------------------------------------*/
#include<reg52.h>

sbit J32_LAT = P1^6;       //鎖存引腳
sbit J32_SER = P1^4;       //數據引腳
sbit J32_CLK = P1^5;       //時鐘引腳
sbit J32_OE  = P1^7;       //使能引腳

unsigned char MoveBitNum,MoveBitNumtemp,IncNum;//移動位數,臨時移動位數,大于一個字節增加字節數
unsigned int HzNum;//漢字個數
unsigned char buff[10];

/*-----------------------------------------------
             16x16漢字取模數據
------------------------------------------------*/
unsigned char code hztest[][32]=    //取模選擇字節正序
{


        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //前面一屏大小的空字符,不顯示,這里根據屏的大小修改,這個是1個漢字屏
        //所以寫入1個漢字
        /*--  文字:  湖  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x01,0x00,0x21,0x1E,0x11,0x12,0x17,0xD2,0x81,0x12,0x41,0x1E,0x41,0x12,0x17,0xD2,
0x14,0x52,0x24,0x5E,0xE4,0x52,0x27,0xD2,0x24,0x52,0x20,0x22,0x20,0x2A,0x00,0x44,

/*--  文字:  北  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x44,0x04,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,
0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x42,0x1C,0x42,0xE4,0x42,0x44,0x3E,0x04,0x00,

/*--  文字:  汽  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x01,0x00,0x21,0x00,0x11,0xFC,0x12,0x00,0x84,0x00,0x41,0xF8,0x48,0x00,0x08,0x00,
0x13,0xF8,0x10,0x08,0xE0,0x08,0x20,0x08,0x20,0x0A,0x20,0x0A,0x20,0x06,0x00,0x02,

/*--  文字:  車  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xFC,0x04,0x00,0x09,0x00,0x11,0x00,0x21,0x00,
0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,

/*--  文字:  工  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0x00,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,

/*--  文字:  業  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x44,0x44,0x24,0x44,0x24,0x48,0x14,0x48,
0x14,0x50,0x14,0x60,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0xFF,0xFE,0x00,0x00,

/*--  文字:  學  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x80,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,

/*--  文字:  院  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x40,0x78,0x20,0x4B,0xFE,0x52,0x02,0x54,0x04,0x61,0xF8,0x50,0x00,0x48,0x00,
0x4B,0xFE,0x48,0x90,0x68,0x90,0x50,0x90,0x41,0x12,0x41,0x12,0x42,0x0E,0x44,0x00,

/*--  文字:  科  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x08,0x10,0x1D,0x10,0xF0,0x90,0x10,0x90,0x10,0x10,0xFD,0x10,0x10,0x90,0x38,0x90,
0x34,0x10,0x50,0x1E,0x53,0xF0,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,

/*--  文字:  技  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x10,0x20,0x10,0x20,0x10,0x20,0x13,0xFE,0xFC,0x20,0x10,0x20,0x10,0x20,0x15,0xFC,
0x18,0x84,0x30,0x88,0xD0,0x48,0x10,0x50,0x10,0x20,0x10,0x50,0x51,0x88,0x26,0x06,

/*--  文字:  學  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x80,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,

/*--  文字:  院  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x40,0x78,0x20,0x4B,0xFE,0x52,0x02,0x54,0x04,0x61,0xF8,0x50,0x00,0x48,0x00,
0x4B,0xFE,0x48,0x90,0x68,0x90,0x50,0x90,0x41,0x12,0x41,0x12,0x42,0x0E,0x44,0x00,

/*--  文字:  K  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0x00,0x44,0x00,0x48,0x00,0x50,0x00,0x70,0x00,
0x50,0x00,0x48,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0xEE,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  電  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE,

/*--  文字:  信  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x08,0x40,0x08,0x20,0x0B,0xFE,0x10,0x00,0x10,0x00,0x31,0xFC,0x30,0x00,0x50,0x00,
0x91,0xFC,0x10,0x00,0x10,0x00,0x11,0xFC,0x11,0x04,0x11,0x04,0x11,0xFC,0x11,0x04,

/*--  文字:  1  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x38,0x00,0x08,0x00,0x08,0x00,0x08,0x00,
0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  5  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x78,0x00,
0x44,0x00,0x02,0x00,0x02,0x00,0x42,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  1  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x38,0x00,0x08,0x00,0x08,0x00,0x08,0x00,
0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  龔  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x04,0x20,0x04,0x10,0x7F,0xFC,0x09,0x20,0x09,0xC4,0x17,0x04,0x20,0xFC,0xC4,0x40,
0x04,0x40,0x3F,0xF8,0x04,0x40,0x04,0x40,0xFF,0xFE,0x08,0x20,0x10,0x10,0x20,0x08,

/*--  文字:  俊  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x08,0x40,0x08,0x40,0x08,0x88,0x11,0x04,0x13,0xFE,0x30,0x02,0x30,0x88,0x51,0x44,
0x92,0x42,0x10,0xF8,0x11,0x88,0x12,0x50,0x10,0x20,0x10,0x50,0x11,0x88,0x16,0x06,

/*--  文字:  宇  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x3F,0xF8,0x01,0x00,0x01,0x00,
0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,







////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //尾部的一屏的空字符,用于清屏,參數和屏大小有關。
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


};



/*-----------------------------------------------
             向595寫入一個字節 單紅色
------------------------------------------------*/
void InputByte( unsigned  char DataR1) //寫一個字節
{
        unsigned  char i;
        for(i=8; i>0; i--)
        {
                J32_SER = (DataR1&0x01);
                J32_CLK = 0;
                J32_CLK = 1;
                DataR1 = DataR1 >> 1;
        }
}


/*-----------------------------------------------
                    延時程序
------------------------------------------------*/
void Delay(unsigned int t)
{
        while(--t);
}


/*-----------------------------------------------
                      主程序
------------------------------------------------*/
main()
{
        unsigned char count;//16行掃描數據,范圍0-15
        unsigned int i, j;
        unsigned char temp;
        //計算數組的元素個數,最終需要的是漢字的個數
        int lenTotal = sizeof(hztest) / sizeof(int);  //所有
        int lenLow = sizeof(hztest[0]) / sizeof(int);  //低位
        int lenHigh = lenTotal / lenLow;  //高位

        while(1)
        {
                i++;
                if(i==240)//更改流動速度,1T單片機和12T單片機速度大約5-8倍,注意更改參數
                {
                        i=0;
                        MoveBitNum++;
                        if(MoveBitNum==16)//每次移動完一個漢字大小后循環
                        {
                                MoveBitNum=0;
                                HzNum+=1;    //調用下一個漢字
                                if(HzNum>=lenHigh-1)//需要顯示的漢字個數,包括前面的一屏空字符的個數,后面清屏的空字符不包含在內,這里是(漢字個數+1)
                                        HzNum=0;   //完全顯示完后循環調用
                        }
                }


                Delay(1);//控制掃描頻率
                //讀取漢字對應屏幕緩沖區的數據,不同大小的屏幕不一樣
                for(j=0; j<2; j++) //取每個漢字的前2個字節,
                {
                        //漢字個數+1
                        buff[j+j+1]=hztest[HzNum+j][count+count+1];  //每次移動完一個漢字后,選擇下一個漢字
                        buff[j+j]=hztest[HzNum+j][count+count];

                }
                //判斷移動的位數
                if(MoveBitNum<8)                   //  判讀移動距離是大于一個字節還是小于一個字節,因為一個字節左移右移最大只能8位
                {
                        IncNum=0;
                        MoveBitNumtemp=MoveBitNum;
                }
                else
                {
                        IncNum=1;    //大于8就減去8得到的數值還是小于8
                        MoveBitNumtemp=MoveBitNum-8;
                }

                J32_LAT=0;       //鎖存無效

                for(j=2; j>0; j--)        //按bit的方式移動緩沖區的內容,然后輸出到595,即取出的數值每個字節左移一定的位數,
                {
                        //后面左移出的數據整合到前面的字節中,保持數據的連續性
                        temp=(buff[j-1+IncNum]<<MoveBitNumtemp)|(buff[j+IncNum]>>(8-MoveBitNumtemp));//這句比較重要,需要自行拿出2個字節的數據模擬分析
                        InputByte(temp);//輸出到595
                }//8個字節傳輸完鎖存輸出
                //控制使能端
                J32_OE  = 1;
                P1=count;//用P0口的前4位控制16行,屏內部通過4-16譯碼器工作,循環掃描16行
                J32_LAT=1;      //鎖存有效,此時一行的數據顯示到屏上
                J32_OE = 0;


                count++;
                if(count==16)
                        count=0;
        }
}


ccc.zip

16.62 KB, 下載次數: 20, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表