用的单片机是普中的开发板,8x8点阵用的是74hc595进行段选,P0口位选函数
74hc595资料点击打开连接code
8x8点阵用的是共阴极(左边的)blog
此次我要实现的是让数字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 } } }