点阵的驱动
文章目錄
- 1 點(diǎn)陣的驅(qū)動(dòng)
- 1.1 8*8點(diǎn)陣的原理圖
- 1.2 點(diǎn)亮點(diǎn)陣中的1個(gè)點(diǎn)
- 1.3 點(diǎn)陣上顯示圖形
- 1.4 縱向動(dòng)態(tài)顯示
- 1.5 橫向動(dòng)態(tài)顯示
1 點(diǎn)陣的驅(qū)動(dòng)
1.1 8*8點(diǎn)陣的原理圖
1.2 點(diǎn)亮點(diǎn)陣中的1個(gè)點(diǎn)
#include <reg52.h> sbit LED = P0 ^ 0; sbit ADDR0 = P1 ^ 0; sbit ADDR1 = P1 ^ 1; sbit ADDR2 = P1 ^ 2; sbit ADDR3 = P1 ^ 3; sbit ENLED = P1 ^ 4; void main() {ENLED = 0; //U3、U4 兩片 74HC138 總使能ADDR3 = 0; //使能 U4 使之正常輸出ADDR2 = 0; //經(jīng) U4 的 Y0 輸出開啟三極管 Q10ADDR1 = 0;ADDR0 = 0;LED = 0; //向 P0.0 寫入 0 來點(diǎn)亮左上角的一個(gè)點(diǎn)while (1); //程序停止在這里 }1.3 點(diǎn)陣上顯示圖形
利用動(dòng)態(tài)刷新的原理。
1.4 縱向動(dòng)態(tài)顯示
#include <reg52.h> sbit ADDR0 = P1 ^ 0; sbit ADDR1 = P1 ^ 1; sbit ADDR2 = P1 ^ 2; sbit ADDR3 = P1 ^ 3; sbit ENLED = P1 ^ 4; unsigned char code image[] = { //圖片的字模表0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF,0x99,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }; void main() {EA = 1; //使能總中斷ENLED = 0; //使能 U4,選擇 LED 點(diǎn)陣ADDR3 = 0;TMOD = 0x01; //設(shè)置 T0 為模式 1TH0 = 0xFC; //為 T0 賦初值 0xFC67,定時(shí) 1msTL0 = 0x67;ET0 = 1; //使能 T0 中斷TR0 = 1; //啟動(dòng) T0while (1); } /* 定時(shí)器 0 中斷服務(wù)函數(shù) */ void InterruptTimer0() interrupt 1 {static unsigned char i = 0; //動(dòng)態(tài)掃描的索引static unsigned char tmr = 0; //250ms 軟件定時(shí)器static unsigned char index = 0; //圖片刷新索引TH0 = 0xFC; //重新加載初值TL0 = 0x67;//以下代碼完成 LED 點(diǎn)陣動(dòng)態(tài)掃描刷新P0 = 0xFF; //顯示消隱switch (i){case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i++; P0 = image[index + 0]; break;case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i++; P0 = image[index + 1]; break;case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i++; P0 = image[index + 2]; break;case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; i++; P0 = image[index + 3]; break;case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i++; P0 = image[index + 4]; break;case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i++; P0 = image[index + 5]; break;case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; i++; P0 = image[index + 6]; break;case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; i = 0; P0 = image[index + 7]; break;default: break;}//以下代碼完成每 250ms 改變一幀圖像tmr++;if (tmr >= 250) //達(dá)到 250ms 時(shí)改變一次圖片索引{tmr = 0;index++;if (index >= 32) //圖片索引達(dá)到 32 后歸零{index = 0;}} }1.5 橫向動(dòng)態(tài)顯示
#include <reg52.h> sbit ADDR0 = P1 ^ 0; sbit ADDR1 = P1 ^ 1; sbit ADDR2 = P1 ^ 2; sbit ADDR3 = P1 ^ 3; sbit ENLED = P1 ^ 4; unsigned char code image[30][8] = {{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, //動(dòng)畫幀 1{0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F}, //動(dòng)畫幀 2{0xFF,0x3F,0x7F,0x7F,0x7F,0x7F,0x7F,0x3F}, //動(dòng)畫幀 3{0xFF,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F}, //動(dòng)畫幀 4{0xFF,0x0F,0x9F,0x9F,0x9F,0x9F,0x9F,0x0F}, //動(dòng)畫幀 5{0xFF,0x87,0xCF,0xCF,0xCF,0xCF,0xCF,0x87}, //動(dòng)畫幀 6{0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3}, //動(dòng)畫幀 7{0xFF,0xE1,0x73,0x73,0x73,0xF3,0xF3,0xE1}, //動(dòng)畫幀 8{0xFF,0x70,0x39,0x39,0x39,0x79,0xF9,0xF0}, //動(dòng)畫幀 9{0xFF,0x38,0x1C,0x1C,0x1C,0x3C,0x7C,0xF8}, //動(dòng)畫幀 10{0xFF,0x9C,0x0E,0x0E,0x0E,0x1E,0x3E,0x7C}, //動(dòng)畫幀 11{0xFF,0xCE,0x07,0x07,0x07,0x0F,0x1F,0x3E}, //動(dòng)畫幀 12{0xFF,0x67,0x03,0x03,0x03,0x07,0x0F,0x9F}, //動(dòng)畫幀 13{0xFF,0x33,0x01,0x01,0x01,0x03,0x87,0xCF}, //動(dòng)畫幀 14{0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7}, //動(dòng)畫幀 15{0xFF,0xCC,0x80,0x80,0x80,0xC0,0xE1,0xF3}, //動(dòng)畫幀 16{0xFF,0xE6,0xC0,0xC0,0xC0,0xE0,0xF0,0xF9}, //動(dòng)畫幀 17{0xFF,0x73,0x60,0x60,0x60,0x70,0x78,0xFC}, //動(dòng)畫幀 18{0xFF,0x39,0x30,0x30,0x30,0x38,0x3C,0x7E}, //動(dòng)畫幀 19{0xFF,0x9C,0x98,0x98,0x98,0x9C,0x1E,0x3F}, //動(dòng)畫幀 20{0xFF,0xCE,0xCC,0xCC,0xCC,0xCE,0x0F,0x1F}, //動(dòng)畫幀 21{0xFF,0x67,0x66,0x66,0x66,0x67,0x07,0x0F}, //動(dòng)畫幀 22{0xFF,0x33,0x33,0x33,0x33,0x33,0x03,0x87}, //動(dòng)畫幀 23{0xFF,0x99,0x99,0x99,0x99,0x99,0x81,0xC3}, //動(dòng)畫幀 24{0xFF,0xCC,0xCC,0xCC,0xCC,0xCC,0xC0,0xE1}, //動(dòng)畫幀 25{0xFF,0xE6,0xE6,0xE6,0xE6,0xE6,0xE0,0xF0}, //動(dòng)畫幀 26{0xFF,0xF3,0xF3,0xF3,0xF3,0xF3,0xF0,0xF8}, //動(dòng)畫幀 27{0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,0xF8,0xFC}, //動(dòng)畫幀 28{0xFF,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFE}, //動(dòng)畫幀 29{0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF} //動(dòng)畫幀 30 }; void main() {EA = 1; //使能總中斷ENLED = 0; //使能 U4,選擇 LED 點(diǎn)陣ADDR3 = 0;TMOD = 0x01; //設(shè)置 T0 為模式 1TH0 = 0xFC; //為 T0 賦初值 0xFC67,定時(shí) 1msTL0 = 0x67;ET0 = 1; //使能 T0 中斷TR0 = 1; //啟動(dòng) T0while (1); } /* 定時(shí)器 0 中斷服務(wù)函數(shù) */ void InterruptTimer0() interrupt 1 {static unsigned char i = 0; //動(dòng)態(tài)掃描的索引static unsigned char tmr = 0; //250ms 軟件定時(shí)器static unsigned char index = 0; //圖片刷新索引TH0 = 0xFC; //重新加載初值TL0 = 0x67;//以下代碼完成 LED 點(diǎn)陣動(dòng)態(tài)掃描刷新P0 = 0xFF; //顯示消隱switch (i){case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i++; P0 = image[index][0]; break;case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i++; P0 = image[index][1]; break;case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i++; P0 = image[index][2]; break;case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; i++; P0 = image[index][3]; break;case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i++; P0 = image[index][4]; break;case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i++; P0 = image[index][5]; break;case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; i++; P0 = image[index][6]; break;case 7: ADDR2 = 1; ADDR1 = 1; ADDR0 = 1; i = 0; P0 = image[index][7]; break;default: break;}//以下代碼完成每 250ms 改變一幀圖像tmr++;if (tmr >= 250) //達(dá)到 250ms 時(shí)改變一次圖片索引{tmr = 0;index++;if (index >= 30) //圖片索引達(dá)到 30 后歸零{index = 0;}} }參考資料:
總結(jié)
- 上一篇: SQLServer数据的基本操作:简单的
- 下一篇: Qt中的QStackedLayout