導航:首頁 > 操作系統 > 單片機點陣移動編輯教程

單片機點陣移動編輯教程

發布時間:2024-12-15 18:43:18

『壹』 你好,51單片機16*16點陣滾動顯示程序能不能發個給我,謝謝了!

/*--------16*16點陣屏的移動顯示------------*/

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned char
#define DATE_OUT P1 //指定P1口做為輸出
sbit DATA=DATE_OUT^0; //列數據輸出位
sbit SCLH=DATE_OUT^1; //列掃描時鍾位
sbit SCLT=DATE_OUT^2; //列數據鎖存位
sbit AB =DATE_OUT^3; //行數據輸出位
sbit SCK =DATE_OUT^4; //行掃描時鍾位
sbit kong=DATE_OUT^5;
unsigned char xxx=0,upcount=0;
unsigned char ccc,time1time=0,s=0;
//段前綴{
//段後綴};
//注釋前綴、/*"
//注釋後綴",
//數據前綴 0x
//數據後綴,
//行前綴
//行後綴},
//行尾綴*/
code unsigned char dong[16][32]={
{0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,0x05,0x04,0x49,0x08,0x2A,0x40,0x14,0x40,
0x10,0x40,0x28,0xA0,0x24,0xA0,0x45,0x10,0x81,0x10,0x02,0x08,0x04,0x04,0x08,0x02},/*"歡",0*/

{0x00,0x00,0x20,0x80,0x13,0x3C,0x12,0x24,0x02,0x24,0x02,0x24,0xF2,0x24,0x12,0x24,
0x12,0x24,0x12,0xB4,0x13,0x28,0x12,0x20,0x10,0x20,0x28,0x20,0x47,0xFE,0x00,0x00},/*"迎",1*/

{0x01,0x00,0x01,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x11,0x10,0x09,0x10,0x09,0x20,
0xFF,0xFE,0x03,0x80,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,0x01,0x00},/*"來",2*/

{0x00,0x04,0xFF,0x84,0x08,0x04,0x10,0x24,0x22,0x24,0x41,0x24,0xFF,0xA4,0x08,0xA4,
0x08,0x24,0x08,0x24,0x7F,0x24,0x08,0x24,0x08,0x04,0x0F,0x84,0xF8,0x14,0x40,0x08},/*"到",3*/

{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},/*"電",4*/

{0x00,0x00,0x7F,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x00,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00},/*"子",5*/

{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},/*"工",6*/

{0x08,0x00,0x1D,0xFC,0xF1,0x04,0x11,0x04,0x11,0x04,0xFD,0xFC,0x10,0x00,0x30,0x00,
0x39,0xFE,0x54,0x20,0x54,0x20,0x91,0xFC,0x10,0x20,0x10,0x20,0x13,0xFE,0x10,0x00},/*"程",7*/

{0x00,0xF8,0x3F,0x00,0x04,0x00,0x08,0x20,0x10,0x40,0x3F,0x80,0x01,0x00,0x06,0x10,
0x18,0x08,0x7F,0xFC,0x01,0x04,0x09,0x20,0x11,0x10,0x21,0x08,0x45,0x04,0x02,0x00},/*"系",8*/

{0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00},/*"三",9*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"一",10*/

{0x02,0x00,0x01,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,
0x04,0x40,0x04,0x20,0x08,0x10,0x08,0x08,0x10,0x08,0x20,0x04,0x40,0x04,0x00,0x00},/*"六",11*/

{0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x88,0x84,0x04,0x80,0x04,0x80,0x10,0x80,
0x08,0x80,0x08,0x80,0xFF,0xFE,0x01,0x40,0x02,0x20,0x04,0x10,0x18,0x08,0x60,0x04},/*"實",12*/

{0x00,0x20,0xF8,0x20,0x08,0x50,0x48,0x50,0x48,0x88,0x49,0x04,0x4A,0xFA,0x7C,0x00,
0x04,0x44,0x04,0x24,0x1D,0x24,0xE4,0xA8,0x44,0x88,0x04,0x10,0x2B,0xFE,0x10,0x00},/*"驗",13*/

{0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x3F,0xF8,0x04,0x00,0x08,0x20,
0x1F,0xF0,0x01,0x10,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00},/*"室",14*/

};

idata unsigned char date[3][32];
idata uchar i=0,displayflag=0;
uchar k=0;
void displaymoveup(unsigned char count,unsigned char time);
void display(unsigned char dis);//做為點陣掃描函數,將顯示緩存的數據輸出到點陣屏
void displaymove(unsigned char count,unsigned char timer);//顯示漢字內容的移動效果,LP指向要顯示第一個字的首地址,C表示顯示字的個數,
//非常好用的字摸軟體PCtoLCD2002完美版 字模選項:陰碼、逐行式、順向

void main(void) //主入口函數
{
display(0);
while(1)
{
displaymove(16,10);
}
}
void display(unsigned char dis)//顯示
{
unsigned char i,ia,j,tmp,x; //定義變數
DATE_OUT=0XFF; //置位高電平做准備
AB=0; //將列數據位清0,准備移位
for(i=0;i<16;i++)
{ //循環輸出16行數據
SCK=0; //為列移位做准備
SCLT=0; //為行鎖存做准備
for(x=3;x>0;x--)
{
for(ia=2;ia>0;)
{ //每行16個點,循環位移兩個位元組
ia--; //循環兩次
if(dis==1)
{
tmp=~date[x-1][i*2+ia]; //讀取點陣數據做輸出,這里用到ia目的是先讀取點陣數據的第二位位元組,因一行16個點由兩個位元組組成, //電路中的移位寄存器最後一位對應最後一列,所以要先輸出一行中的第二個位元組數據
}
if(dis==0)
tmp=0xff;
for(j=0;j<8;j++)
{ //循環兩次,每次移一個位元組,
SCLH=0; //為列移位做准備
DATA=tmp&0x01; //將數據低位做輸出,由電路圖可知,移位寄存器的最後一位對應最後一列,因此先移最後一位
tmp>>=1; //將數據緩沖右移一位,為下次輸出做准備
SCLH=1; //將DATA上的數據移入寄存器
} //移入單位元組結束
} //移入兩個位元組結束
}
SCK=1; //SCK拉高,列數據移位,相應行拉低,三極體導通輸出電量到相應行點陣管陽極(共陽)
SCLT=1; //SCLT拉高,將數據鎖存輸出到相應行的點陣發光管顯示,顯示一行後將保持到下一行顯示開始
AB=1; //列數據位只在第一行時為0,其它時候都為1,當將這個0移入寄存器後,從第一位開始一直移位最後一位,
//移位的過程,AB就必需是1,這是因為不能同時有兩個及兩個以上0的出現,否則顯示出亂
}
j=20;
while(j--); //每一行的顯示,保持16個移位時間,因此,最後一行的顯示,也要加入保持時間,補嘗顯示的亮度
SCK=0; //
SCK=1; //將最後一行數據移出
}
void displaymove(unsigned char count,unsigned char timer)//顯示漢字內容的移動效果,
//LP指向要顯示第一個字的首地址,C表示顯示字的個數, //timer是移動的速度
{
unsigned char c=8,i=0,ia=0,num=0;
unsigned char timerc=0;
unsigned char tmp2[16];
for(i=0;i<16;i++)
{
tmp2[i]=dong[xxx/2][i*2+ccc%2]; //取半個漢字點陣數據,16位元組
}
xxx++;
if(xxx==(count*2))
xxx=0;
ccc++;
while(c)
{ //循環處理
ia=0; //做為點陣數組的元素
for(i=0;i<16;i++)
{//移動是16行同時移,因此要處理16個位元組
// if(date[num][ia]&0x80)

date[num][ia]<<=1; //移當前顯示緩沖的前半行位元組
if(date[num][ia+1]&0x80) //判斷後半行位元組的高位是否為1,是移入前半行位元組低位,否則不處理
date[num][ia]++;
ia++;
date[num][ia]<<=1; //移當前顯示緩沖的前半行位元組
if(date[num+1][ia-1]&0x80) //判斷後半行位元組的高位是否為1,是移入前半行位元組低位,否則不處理
date[num][ia]++;
ia--;

date[num+1][ia]<<=1; //移當前顯示緩沖的前半行位元組
if(date[num+1][ia+1]&0x80) //判斷後半行位元組的高位是否為1,是移入前半行位元組低位,否則不處理
date[num+1][ia]++;
ia++;
date[num+1][ia]<<=1; //移當前顯示緩沖的前半行位元組
if(date[num+2][ia-1]&0x80) //判斷後半行位元組的高位是否為1,是移入前半行位元組低位,否則不處理
date[num+1][ia]++;
ia--;

date[num+2][ia]<<=1; //移當前顯示緩沖的前半行位元組
if(date[num+2][ia+1]&0x80) //判斷後半行位元組的高位是否為1,是移入前半行位元組低位,否則不處理
date[num+2][ia]++;
ia++;
date[num+2][ia]<<=1;
if(tmp2[i]&0x80) //判斷下一個要顯示漢字的前半行位元組的高位是否為1,是移入,否則不處理
date[num+2][ia]++;
ia++;
tmp2[i]<<=1; //下一個要顯示漢字的半行位元組向高位移一位,准備下一次取位
}
timerc=timer; //處理完16行,調用顯示函數更新點陣
while(timerc--) //循環做為處理的速度,即移動的速度
display(1);
//----------
c--; //移完一半,進入下一半或下一個漢字,直到結束
}
}
void displaymoveup(unsigned char count,unsigned char time)
{
unsigned char k,i,j,tim=0;
for(i=0;i<3;i++)
{
for(j=0;j<32;j++)
{
date[i][j]=xin[upcount][j];
}
upcount++;
}

if(upcount==count)
upcount=0;
for(k=0;k<16;k++)
{
for(i=0;i<3;i++)
{
for(j=0;j<32;j++)
{
if(j<30)
date[i][j]=date[i][j+2];
if(j>=30)
date[i][j]=0x00;
}
}
tim=time;
while(tim--)
display(1);
}
}

『貳』 單片機16*16LED點陣,怎樣讓文字從上到下顯示

通過撰寫代碼來實現。

『叄』 求51單片機16*16的點陣漢字移動原理

首先是讓漢字能夠靜態顯示,顯示一段時間後(時間可能很短)把所顯示的漢字編碼移一位重新送出,比如要向左移動,原本顯示在第一列的數據就丟棄了,把第二列的數據送到第一列上顯示,依次移動顯示一屏,顯示一段時間再進行一次移動,人們看起來也就是移動的了。 還搞不明白的話,可以晚上問我。

閱讀全文

與單片機點陣移動編輯教程相關的資料

熱點內容
漢化版pdf 瀏覽:777
江門加密鎖哪家不錯 瀏覽:636
cad轉pdf清晰 瀏覽:415
微信卡包能加密碼鎖嗎 瀏覽:565
全球加密虛擬資產 瀏覽:711
php刪除第一個元素 瀏覽:115
時間演算法公式小學三年級 瀏覽:828
初級程序員含金量 瀏覽:563
單片機與指令 瀏覽:13
安卓系統怎麼刪除其他內存 瀏覽:508
軟體掛一個伺服器有什麼區別 瀏覽:713
測繪航測數據處理之空三加密原理 瀏覽:885
psp皮膚放哪個文件夾 瀏覽:212
藍翔有沒有程序員專業 瀏覽:231
我的世界伺服器如何使用頭顱指令 瀏覽:783
伺服器抖易幫是什麼 瀏覽:551
dhcp伺服器靜態地址分配如何設置 瀏覽:623
string分割java 瀏覽:167
游戲開發換程序員 瀏覽:907
單片機點陣移動編輯教程 瀏覽:599