這個單片機驅(qū)動8*8點陣是基于一個proteus的仿真開發(fā)板做的.整個的仿真原理圖如下:
0.png (29.25 KB, 下載次數(shù): 61)
下載附件
2016-9-9 23:38 上傳
用下面這個程序來運行仿真就可以得到效果.proteus仿真單片機開發(fā)板和源程序下載:
程序.zip
(28.66 KB, 下載次數(shù): 47)
2016-9-9 23:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
仿真圖.zip
(77.53 KB, 下載次數(shù): 67)
2016-9-9 23:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
8*8點陣的動態(tài)顯示程序:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- void delay_ms(uint);
- uchar code dz88_hang[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //行P1 需高電平
- uchar code dz88_lie[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //列P0 需低電平
- //uchar code dz88_dm[]={0x00,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0x00}; //N
- //uchar code dz88_dm1[]={0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,}; //1
- //uchar code dz88_dm1[]={0xFF,0x20,0x20,0x24,0x24,0x04,0x04,0xFF,}; //2
- //uchar code dz88_dm1[]={0xFF,0x3C,0x24,0x24,0x24,0x00,0x00,0xFF,}; //3
- //uchar code dz88_dm1[]={0xFF,0x07,0x07,0xE7,0x00,0x00,0xE7,0xE7,}; //4
- uint num1;//用來控制動態(tài)掃描的速度
- uint num2;//用來控制字符與字符切換速度
- uchar i; //行控制數(shù)的變量
- uchar j; //字符與字符切換的變量
- uchar code digittab[][8]={
- {0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,},//1
- {0xFF,0xBC,0x7A,0x76,0x6E,0x9E,0xFF,0xFF,},//2
- {0xFF,0xBD,0x7E,0x6E,0x56,0xB9,0xFF,0xFF,},//3
- {0xC7,0xB7,0x77,0xF7,0x00,0xF7,0xF7,0xF7,},//4
- {0xFF,0x0D,0x6E,0x6E,0x6E,0x6E,0x61,0xFF,},//5
- {0xFF,0xC7,0xD7,0xD7,0x00,0xD7,0xD7,0xC7,},//中
- {0x00,0x7E,0x54,0x40,0x54,0x50,0x7E,0x00,},//國
- {0xFD,0xFB,0xF7,0x0F,0xEF,0xF7,0xFB,0xFD,},//人
- };
- void main()
- {
- j=0;
- while(1)
- {
- // for(j=0;j<4;j++)
- if(j<8)
- {
- P1=dz88_hang[i]; //行掃描
- P0=digittab[j][i];
-
- }
- // num1++; //用于控制動態(tài)掃描的速度 5ms
- if(++num1>=50)
- {
- num1=0;
- // i++;
- if(++i>=8)
- i=0;
- }
- // num2++;
- if(++num2>=10000) //用于控制動字符間的切換速度 1s
- {
- num2=0;
- // j++;
- if(++j>8)
- j=0;
- }
- }
- }
- /*
- //顯示一個字母或者圖形
- void main()
- {
- uchar i;
- while(1)
- {
- for(i=0;i<8;i++)
- {
- P1=dz88_hang[i]; //行全部選中
- //P0=dz88_dm[i]; //N
- P0=dz88_dm1[i];
- delay_ms(5);
- }
- }
- }
- */
- /* 全部列選中
- void main()
- {
- uchar i;
- P0=0X00; //列全部選中
- while(1)
- {
- // P0=0X00; //列全部選中
- // P1=0Xff; //行全部選中
- for(i=0;i<8;i++)
- {
- P1=dz88_hang[i]; //行全部選中
- delay_ms(1000);
- }
- }
- }
- */
- /*
- // 全部行選中
- void main()
- {
- uchar i;
- //P0=0X00; //列全部選中
- P1=0Xff; //行全部選中
- while(1)
- {
- // P0=0X00; //列全部選中
- // P1=0Xff; //行全部選中
- for(i=0;i<8;i++)
- {
- P0=dz88_lie[i]; //行全部選中
- delay_ms(7);
- }
- }
- }
- */
- /*
- void delay_ms(uint z) //延時子程序
- {
- uchar y;
- uint x;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- */
復制代碼
|