用的单片机是普中的开发板,8x8点阵用的是74hc595进行段选,P0口位选
74hc595资料点击打开链接
8x8点阵用的是共阴极(左边的)
这次我要实现的是让数字0从右到左依次显示
#include <reg52.h>#include <intrins.h>typedef unsigned int u16;typedef unsigned char u8;sbit SCLK=P3^6;sbit RCK=P3^5;sbit SER=P3^4;u8 code duan0[8][8]={{0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00},//数字0的段选{0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,0x00},{0x42,0x42,0x42,0x3C,0x00,0x00,0x00,0x3C},{0x42,0x42,0x3C,0x00,0x00,0x00,0x3C,0x42},{0x42,0x3C,0x00,0x00,0x00,0x3C,0x42,0x42},{0x3C,0x00,0x00,0x00,0x3C,0x42,0x42,0x42},{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C},{0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00}};u8 code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选void delay(u16 c)//延时函数{u8 a,b;for(;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}void sandbyte(u8 dat)//给74hc595发送段选的数据{u8 i;SCLK=0;RCK=0;for(i=0;i<8;i++){SER=dat>>7;dat<<=1;SCLK=1;_nop_();_nop_();SCLK=0;}RCK=1;_nop_();_nop_();RCK=0;}void main(){u8 i,j;u8 num;while(1){for(i=0;i<8;i++){num=40;while (num--)//让下面的for函数持续运行40次,让数字0 能停留一段时间{for(j=0;j<8;j++){P0=wei[j];sandbyte(duan0[i][j]);delay(1);sandbyte(0x00);}}delay(100);//这里是扫描延时100ms}}}