我这个程序只要加入一些延时比如_nop_和for(i=10;i>0;i--)就会造成点阵的闪烁原因不知采用16个74HC595进行驱动
还有我想加入左移功能怎么实现?希望各位帮帮小白我
本程序使用keil4编译,仿真为protues8.6
单片机程序和仿真都在我的附件里方便查看,谢谢各位了(^v^)
16x64点阵.rar
(142.86 KB, 下载次数: 13)
- /*----------------------------------------------------------------------------------*/
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uhar unsigned char
- sbit HC595_SH=P2^0; //数据锁存端
- sbit HC595_DS=P2^1; //数据输出端
- sbit HC595_ST=P2^2 ;//并行输出端
- uhar Mould[8]; //位寄存
- uhar Upright[8]; //段寄存
- uint code LED[4][32]= //4字数组
- {{
- 0x20,0x18,0x0A,0xAA,0xAA,0xAA,0x0A,0xFE,0x0A,0xAA,0xAA,0xAA,0x0A,0x28,0x18,0x00,
- 0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
- },
- {
- 0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x85,0x14,0x0C,0x00,
- 0x00,0x91,0xA9,0x4D,0xAB,0x99,0xA0,0xAA,0xAA,0xAA,0xBF,0xA9,0xA9,0xA9,0xA0,0x00,
- },
- {
- 0x00,0xFC,0x04,0x04,0xFC,0x01,0xFD,0x55,0x57,0x55,0x55,0x55,0xFD,0x01,0x00,0x00,
- 0x00,0x0F,0x04,0x04,0x8F,0x88,0x89,0x4F,0x59,0x25,0x65,0x57,0x85,0x84,0xE0,0x00,
- },
- {
- 0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,
- 0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x40,0x78,0x00,
- }
- };
- /*----------------------------------------------------------------------------------*/
- void HC595_write() //数据输出
- {
- uhar i,j;
- HC595_SH=1;
- HC595_DS=1;
- HC595_ST=1;
- for(j=4;j>0;j--)
- {
- for(i=0;i<8;i++)
- {
- HC595_SH=0;
- HC595_DS=Mould[j*2-2]&0x80;
- Mould[j*2-2]<<=1;
- HC595_SH=1;
- }
- for(i=0;i<8;i++)
- {
- HC595_SH=0;
- HC595_DS=Mould[j*2-1]&0x80;
- Mould[j*2-1]<<=1;
- HC595_SH=1;
- }
- for(i=0;i<8;i++)
- {
- HC595_SH=0;
- HC595_DS=Upright[j*2-1]&0x80;
- Upright[j*2-1]<<=1;
- HC595_SH=1;
- }
- for(i=0;i<8;i++)
- {
- HC595_SH=0;
- HC595_DS=Upright[j*2-2]&0x80;
- Upright[j*2-2]<<=1;
- HC595_SH=1;
- }
- }
- HC595_ST=0;
- HC595_ST=1;
- }
- /*----------------------------------------------------------------------------------*/
- void LED_DISPLAY() //选择数据
- {
- static uint i;
- static uint k=0x0001;
-
- Mould[6]=~k/256;
- Mould[7]=~k%256;
- Upright[6]=LED[3][ i];[ i]
- Upright[7]=LED[3][i+16];
-
- Mould[4]=~k/256;
- Mould[5]=~k%256;
- Upright[4]=LED[2][ i];[ i]
- Upright[5]=LED[2][i+16];
-
- Mould[2]=~k/256;
- Mould[3]=~k%256;
- Upright[2]=LED[1][ i];[ i]
- Upright[3]=LED[1][i+16];
-
- Mould[0]=~k/256;
- Mould[1]=~k%256;
- Upright[0]=LED[0][ i];[ i]
- Upright[1]=LED[0][i+16];
-
- k=_irol_(k,1);
- HC595_write();
- i++;
- if(i==16)
- {
- i=0;
- }
- }
- /*----------------------------------------------------------------------------------*/
- void main()
- {
- while(1)
- {
- while(1)
- {
- LED_DISPLAY();
- }
- }
- }
- /*----------------------------------------------------------------------------------*/
复制代码 |