- /*-----------------------------------------------
- 名稱:595控制4漢字點(diǎn)陣屏
- 修改:無(wú) 51單片機(jī)
- 內(nèi)容:屏+5V、GND連接電源5V
- 現(xiàn)象:使用普通速度51系列單片機(jī)。單個(gè)漢字屏出現(xiàn)紅色“德”
- ------------------------------------------------*/
- #include<reg52.h>
- sbit T_STR = P2^6; //鎖存引腳,屏上標(biāo)識(shí)位STR
- sbit R1 = P0^4; //數(shù)據(jù)引腳,屏上標(biāo)識(shí)R1
- sbit G1 = P2^4; //數(shù)據(jù)引腳,屏上標(biāo)識(shí)G1
- sbit T_CLK = P2^5; //時(shí)鐘引腳,屏上標(biāo)識(shí)位CLK
- sbit OE = P2^1; //使能引腳,屏上標(biāo)識(shí)EN/OE
- unsigned char tab[8];
- unsigned char DIS[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//行數(shù)據(jù)
- /*-----------------------------------------------
- 16x16漢字取模數(shù)據(jù)
- ------------------------------------------------*/
- unsigned char code hztest[][32]= //二維數(shù)組,目的是減少運(yùn)算,可以用最基本的一維數(shù)組,每個(gè)漢字有32個(gè)字節(jié)數(shù)據(jù)
- {
- /*-- 文字: 德 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x08,0x02,0x08,0x02,0xF4,0x7F,0x02,0x02,0xE9,0x3F,0x28,0x25,0x24,0x25,0xE6,0x3F,
- 0x05,0x00,0xF4,0x7F,0x04,0x02,0x04,0x24,0xA4,0x44,0xA4,0x50,0x94,0x10,0x04,0x1F,
- /*-- 文字: 飛 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0xFF,0x03,0x00,0x02,0x00,0x22,0x00,0x12,0x00,0x0A,0x00,0x06,0x00,0x0A,
- 0x00,0x12,0x00,0x22,0x00,0x04,0x00,0x04,0x00,0x48,0x00,0x50,0x00,0x60,0x00,0x40,
- /*-- 文字: 萊 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x10,0x04,0x10,0x04,0xFF,0x7F,0x90,0x04,0x80,0x00,0xFC,0x1F,0x80,0x00,0x88,0x08,
- 0x90,0x04,0xFE,0x3F,0xC0,0x01,0xA0,0x02,0x90,0x04,0x8C,0x18,0x83,0x60,0x80,0x00,
- };
- /*-----------------------------------------------
- 向595寫入一個(gè)字節(jié) 單紅色
- ------------------------------------------------*/
- void InputByte( unsigned char DataR1) //寫一個(gè)字節(jié)
- {
- unsigned char i;
- for(i=8; i>0; i--)
- {
- R1 = !(DataR1&0x01);
- T_CLK = 0;
- T_CLK = 1;
- DataR1 = DataR1 >> 1;
- }
- }
- /*-----------------------------------------------
- 向595寫入兩個(gè)字節(jié) 雙色
- ------------------------------------------------*/
- /*
- void Input2Byte( unsigned char DataR1,unsigned char DataG1) //寫一個(gè)字節(jié)
- {
- unsigned char i;
- for(i=8; i>0; i--)
- {
- R1 = !(DataR1&0x01);
- G1 = !(DataG1&0x01);
- T_CLK = 0;
- T_CLK = 1;
- DataR1 = DataR1 >> 1;
- DataG1 = DataG1 >> 1;
- }
- }
- */
- /*-----------------------------------------------
- 初始化定時(shí)器,做為動(dòng)態(tài)掃描
- ------------------------------------------------*/
- void Init_Timer1(void)
- {
- TMOD |= 0x10;
- EA=1; //總中斷使能
- ET1=1; //定時(shí)中斷使能
- TR1=1; //打開(kāi)定時(shí)器開(kāi)關(guān)
- }
- /*-----------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- Init_Timer1(); //初始化定時(shí)器
-
- while(1)
- {
- //可以加入其它的控制程序
- }
- }
- /*-----------------------------------------------
- 定時(shí)器執(zhí)行動(dòng)態(tài)掃描
- ------------------------------------------------*/
- void Timer1_isr(void) interrupt 3
- {
- static unsigned char count,j;
- unsigned char i;
- TH1=0xff; //重裝初值
- TL1=0;
- T_STR=0; //鎖存釋放
-
- for(j=0;j<1;j++) //取每個(gè)漢字的前2個(gè)字節(jié),數(shù)據(jù)傳輸完成后鎖存輸出即可 j表示漢字個(gè)數(shù),如果是3個(gè)漢字屏就可以修改成3
- {
- InputByte(~hztest[j][i]);
- InputByte(~hztest[j][i+1]);
- }
- OE=1; //暫時(shí)關(guān)閉屏幕,防止出現(xiàn)鬼影,如果沒(méi)有使用該引腳控制則會(huì)出現(xiàn)拖影現(xiàn)象。
- T_STR=1; //鎖存有效,此時(shí)一行的數(shù)據(jù)顯示到屏上
- P0=DIS[15-count]|0xf0;//用P0口的前4位控制16行,屏內(nèi)部通過(guò)4-16譯碼器工作,循環(huán)掃描其他15行
- OE=0;//使能
- count++;
- i+=2; //累加調(diào)用下一行數(shù)據(jù)
- if(count==16)
- count=0;
- if(i==32)
- i=0;
- }
復(fù)制代碼 |