貢獻(xiàn)一個(gè)8*8的點(diǎn)陣控制代碼,比較合適初學(xué)者掌握點(diǎn)陣的控制原理。
點(diǎn)陣連接方式很簡(jiǎn)單,P0接行信號(hào),P2接列信號(hào),可以高位在前,也可以高位在后,主意編碼的方式。
硬件電路圖,P0直接接行信號(hào),P2直接接列信號(hào),高位在前。
硬件電路圖,P0直接接行信號(hào),P2直接接列信號(hào),高位在前。
編碼方式
編碼方式
單片機(jī)源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- void delay1ms(unsigned char c) //誤差 0us
- {
- unsigned char a,b;
- for(c;c>0;c--)
- for(b=142;b>0;b--)
- for(a=2;a>0;a--);
- }
- unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //縱條表
- unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //衡條表
- //unsigned char code a[]={0x18,0x24,0x24,0x42,0x7E,0x42,0x42,0x81};
- unsigned char code a[] = {0xE7,0xDB,0xDB,0xBD,0x81,0xBD,0xBD,0x7E};
- #if 0
- unsigned char number[]= {
- 0xFF,0x9F,0xBF,0xBF,0xBF,0xBF,0x1F,0xFF,/*"1",0*/
- 0xFF,0xC3,0xDB,0xDF,0xEF,0xF7,0xFB,0xC3,/*"2",1*/
- 0xFF,0xC3,0xDB,0xE7,0xDF,0xDF,0xDB,0xE3,/*"3",2*/
- 0xFF,0xDF,0xCF,0xD7,0xDB,0xDB,0xC7,0xDF,/*"4",3*/
- 0xFF,0xC3,0xFB,0xE3,0xDF,0xDF,0xDB,0xE3,/*"5",4*/
- 0xFF,0xE7,0xFB,0xFB,0xC3,0xDB,0xDB,0xE7,/*"6",5*/
- 0xFF,0xC3,0xEF,0xEF,0xF7,0xF7,0xF7,0xF7,/*"7",6*/
- 0xFF,0xC7,0xDB,0xDB,0xE7,0xDB,0xDB,0xE7,/*"8",7*/
- 0xFF,0xE7,0xDB,0xDB,0xC3,0xDF,0xDF,0xE7,/*"9",8*/
- 0xFF,0xE7,0xDB,0xDB,0xDB,0xDB,0xDB,0xE7/*"0",9*/};
- #endif
- #if 0 //高位在后
- unsigned char chara[6][8]={
- {0xFF,0xFF,0xF7,0xEB,0xED,0xC1,0x9C,0xFF},/*"A",0*/
- {0xFF,0xFF,0xC1,0xDD,0xE1,0xDD,0xC1,0xFF},/*"B",1*/
- {0xFF,0xFF,0x83,0xF9,0xFD,0xB9,0x83,0xFF},/*"C",2*/
- {0xFF,0xFF,0xE1,0xDD,0xDD,0xCD,0xE1,0xFF},/*"D",3*/
- {0xFF,0xFF,0xC1,0xFD,0xE1,0xFD,0xC1,0xFF},/*"E",4*/
- {0xFF,0xFF,0xC1,0xFD,0xE1,0xFD,0xFD,0xFF},/*"F",5*/
- };
- #endif
- #if 1 //高位在前
- unsigned char chara[6][8]={
- {0xFF,0xFF,0xEF,0xD7,0xB7,0x83,0x39,0xFF},/*"A",0*/
- {0xFF,0xFF,0x83,0xBB,0x87,0xBB,0x83,0xFF},/*"B",1*/
- {0xFF,0xFF,0xC1,0x9F,0xBF,0x9D,0xC1,0xFF},/*"C",2*/
- {0xFF,0xFF,0x87,0xBB,0xBB,0xB3,0x87,0xFF},/*"D",3*/
- {0xFF,0xFF,0x83,0xBF,0x87,0xBF,0x83,0xFF},/*"E",4*/
- {0xFF,0xFF,0x83,0xBF,0x87,0xBF,0xBF,0xFF},/*"F",5*/
- };
- unsigned char temp[] = {0,0x01,0x3,0x7,0xF,0x1F,0x3F,0x7F,0xFF};
- unsigned char temp2[] = {0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80};
- void main()
- {
- unsigned char i,j,k,z;
- P0 = 1;
- P2 = 0xFE;
- #if 1
- //向左移動(dòng)字符A
- while(1){
-
- for(k=0;k<16;k++)
- for(j=0;j<30;j++)
- for(i=0;i<8;i++){
- P0 = tabb[i];
- if(k<=7)
- P2 = a[i]>>(8-k) | temp2[k] ;//屏蔽左邊沒(méi)有數(shù)據(jù)的位
- else
- P2 = ( a[i]<< (k-8) ) | temp[k-8] ; //屏蔽右邊移出來(lái)的空位,補(bǔ)一,否則右邊會(huì)亮
- delay1ms(2);
- }
- }
- #endif
- #if 0
- //向左移動(dòng)所有字符
- while(1)
- {
- for(z=0;z<6;z++)
- {
- for(j=0;j<8;j++) //在可見視窗內(nèi),只能顯示8列數(shù)據(jù),
- {
- for(k=0;k<10;k++) //每一幀數(shù)據(jù)要顯示一定時(shí)間,否則看不到要顯示的內(nèi)容
- for(i=0;i<8;i++) //顯示一幀,每一幀數(shù)據(jù)由8行組成
- {
- P0 = tabb[i];
- if(z == 5)
- P2 = chara[z][i] << j;
- else
- P2 = chara[z][i] << j | (chara[z+1][i] >> (8-j));//對(duì)數(shù)據(jù)做重新的組合之后再顯示
- delay1ms(2);
- }
- }
- }
- }
- #endif
- #if 0
- while(1){
- //先將二維數(shù)組變?yōu)橐痪S數(shù)組,這樣比較容易操作。向上移動(dòng)顯示0-9 ,P0為行掃描,P2為列掃描
- for(k=0;k<sizeof(number)-8;k++)
- for(j=0;j<30;j++)
- for(i=0;i<8;i++){
- P0 = tabb[i];
- P2 = number[k+i];
- delay1ms(2);
- }
- }
- #endif
- #if 0
- //靜態(tài)顯示字母A
- while(1){
- for(i=0;i<8;i++){
- P0 = tabb[i];
- P2 = a[i];
- delay1ms(2);
- }
- }
- #endif
- #if 0
- while(1){
- //循環(huán)顯示0-9 ,P0為行掃描,P3為列掃描
- for(k=0;k<10;k++)
- for(j=0;j<200;j++)
- for(i=0;i<8;i++){
- P0 = tabb[i];
- P2 = number[k][i];
- delay1ms(2);
- }
- }
- #endif
-
-
- /*
-
- while(1){
- for(i=0;i<8;i++){
- P1 = a[i];
- P3 = taba[i];
- delay1ms();
- P1 = 0;
- P3 = 0;
-
- }
- }
-
-
- while(1){
- //逐行掃描,從上到下
- for(i=0;i<8;i++){
- P0 = tabb[i];
- Delay500ms();
- P2 = 0x00;
- }
- //逐行掃描,從下到上
- for(i=7;i>0;i--){
- P0 = tabb[i];
- Delay500ms();
- P2 = 0x00;
- }
- //逐列掃描 從右到左
- for(i=0;i<8;i++){
- P0 = 0xFF;
- P2 = taba[i];
- Delay500ms();
- }
- //逐列掃描 從左到右
- for(i=7;i>0;i--){
- P0 = 0xFF;
- P2 = taba[i];
- Delay500ms();
- }
- P0 = 0;
- P2 = 0;
- }
- */
- }
復(fù)制代碼
所有資料51hei提供下載:
dotled.rar
(267.93 KB, 下載次數(shù): 22)
2019-4-4 11:07 上傳
點(diǎn)擊文件名下載附件
點(diǎn)陣代碼
|