这个单片机驱动8*8点阵是基于一个proteus的仿真开发板做的.整个的仿真原理图如下:
用下面这个程序来运行仿真就可以得到效果.proteus仿真单片机开发板和源程序下载:
程序.zip
(28.66 KB, 下载次数: 47)
仿真图.zip
(77.53 KB, 下载次数: 67)
8*8点阵的动态显示程序:
- #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;//用来控制动态扫描的速度
- uint num2;//用来控制字符与字符切换速度
- uchar i; //行控制数的变量
- 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++; //用于控制动态扫描的速度 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--);
- }
- */
复制代码
|