?? 4字點陣屏驅動程序.c
字號:
/****************************************************************************************
51_isp學習板 4個漢字LED點陣屏驅動程序。 C51程序
編寫:luojian
日期:2007-7-26
Email:lojan@126.com
接口:
請查看"51_isp學習板原理圖"
本程序目的在于了解和撐握單片機人驅動16*16點陣LED動態掃描程序的寫法和用LED顯示漢字的方法。
所先由專用漢字取模軟件對漢字進行取模,由于一個漢字至少要16*16的點陣可能正常,所以一個漢字
在單片機中要32個字節的內存保存。89S51數據存儲器有4K,所以89S51中可以保存100個左右的漢字。
單片機通過串口與點陣屏連接,點陣屏列驅動為74HC595一個數8位,四字須8個595IC,行驅動為74HC138由于
兩個138驅動16行。
程序的算法為取出每一個漢字的最上一行編碼通過串口發送到595上,595通過內移位鎖存器將數據鎖存在
端口上,8951向595發送移位時鐘信號和鎖存信號。并驅動138對各列進行掃描。掃描完16行后重復。
*****************************************************************************************/
#include <at89x51.H>
unsigned char code hanzi[4][32]; //字模數組
unsigned char code sw[16]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //138的驅動代碼,根據138的真值表計算而來。
}; /*16行段碼*/
unsigned char e;
void delay(); /*延時*/
/*********************************************************
函數名:out_rxd
功能:從串口發送數據。串口工作在同步模式下。RX發送數。TX發送時鐘脈
51_isp學習板 4個漢字LED點陣屏驅動程序。 C51程序
/*********************************************************/
void out_rxd(unsigned char *d) /*從串口發送數據*/
{
SBUF=*d;
while(TI==0); //等待發送完畢
TI=0;
}
/*********************************************************
函數名:delay()
功能:延時
51_isp學習板 4個漢字LED點陣屏驅動程序。 C51程序
/*********************************************************/
void delay()
{unsigned char n;
for(n=50;n>0;n--)
{;}
}
/*********************************************************
函數名:main()
功能:主功能函數
51_isp學習板 4個漢字LED點陣屏驅動程序。 C51程序
/*********************************************************/
void main()
{
unsigned char i; //i是從字模數組里向后取數據時的計數器,用以改變顯示文字的內容.
P2_0=0; //關閉蜂鳴器
SCON=0; //初始化串口為工作方式0(同步通信方式,TxD輸出同步脈沖)
while(1) //重復循環顯示
{
for(i=1;i<=31;i+=2) //
{
P0_4=1;
out_rxd(&hanzi[0][i]); //從串口輸出第1個字的第一字節。
out_rxd(&hanzi[0][i-1]); //從串口輸出第1個字的第二字節。
out_rxd(&hanzi[1][i]); //從串口輸出第2個字的第一字節。
out_rxd(&hanzi[1][i-1]); //從串口輸出第2個字的第二字節。0x00,
out_rxd(&hanzi[2][i]);
out_rxd(&hanzi[2][i-1]);
out_rxd(&hanzi[3][i]);
out_rxd(&hanzi[3][i-1]);
P0_6=1; //鎖存為高,595鎖存信號
P0=sw[e]; //輸出行信號
delay(); //延時,等待一段時間,讓這列顯示的內容在人眼內產生“視覺暫留”現象。*/
//關閉顯示
e++; //行加一
if(e==16) //一共16行。
e=0;
}
}
}
unsigned char code hanzi[4][32]={ //二維數據
/*-- 文字: 我 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0xFD,0x9F,0xF5,0xE3,0xED,0xEF,0xED,0xEF,0xFD,0xEF,0x80,0x00,0xFD,0xEF,0xED,0xEF,
0xEB,0x8F,0xF3,0xE3,0xFB,0xEC,0xF5,0xEF,0xB6,0x6F,0xAF,0xEF,0x9F,0xEB,0xBF,0xF7,
/*-- 文字: 很 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0xFF,0xF7,0xE0,0x27,0xEF,0xBB,0xE0,0x2D,0xEF,0xAE,0xEF,0xB7,0xE0,0x3B,0xFD,0xB9,
0xED,0xBA,0xC5,0xBB,0xFB,0xBB,0xF7,0xBB,0xE5,0xBB,0x8E,0xBB,0xDF,0x1B,0xFF,0xBB,
/*-- 文字: 愛 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0xE0,0xFF,0xF6,0x03,0xF7,0xB7,0xFB,0x6F,0x80,0x03,0xBF,0xBB,0xFF,0xBD,0xC0,0x03,
0xFF,0xDF,0xF0,0x1F,0xFB,0xCF,0xFD,0x2F,0xFC,0xF7,0xF3,0x39,0x8F,0xCE,0xDF,0xF3,
/*-- 文字: 你 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0xFF,0x6F,0xFE,0x6F,0xDF,0x77,0x80,0x37,0xDF,0xBB,0xED,0xD3,0xFD,0xE9,0xF5,0xBA,
0xED,0x3B,0xED,0xBB,0xDD,0xDB,0x9D,0xDB,0xDD,0xEB,0xFD,0x7B,0xFE,0xFB,0xFF,0xFF
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -