1、主要利用二极管的动态扫描,根据电路图,分配I/O整理思路
2、#include "reg52.h"//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
3、#define uint unsigned int#define uchar unsigned char
4、sbit smg=P3^7;uchar 罕铞泱殳count=0,j=0,a=0;uchar code saomi锾攒揉敫ao[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; //共阳极uint code xianshi [18][8]={{0xff,0xff,0xc1,0xbe,0xbe,0xbe,0xc1,0xff}, //0{0xff,0xff,0xff,0xff,0xde,0x80,0xfe,0xff}, //1{0xff,0xff,0xd8,0xba,0xba,0xba,0xc6,0xff}, //2{0xff,0xff,0xdd,0xb6,0xb6,0xb6,0xc9,0xff}, //3{0xff,0xff,0xf3,0xeb,0xdb,0x80,0xfb,0xff}, //4{0xff,0xff,0x8d,0xae,0xae,0xae,0xb1,0xff}, //5{0xff,0xff,0xc1,0xb6,0xb6,0xb6,0xd9,0xff}, //6{0xff,0xff,0xbf,0xbf,0xbf,0xb0,0x8f,0xff}, //7{0xff,0xff,0xc9,0xb6,0xb6,0xb6,0xc9,0xff}, //8{0xff,0xff,0xcd,0xb6,0xb6,0xb6,0xc1,0xff}, //9{0xff,0xff,0x80,0xb7,0xb7,0xcf,0xff,0xff}, //P{0xff,0xff,0x80,0xb7,0xb3,0x8c,0xff,0xff}, //R{0xff,0xff,0x80,0xb6,0xb6,0xb6,0xff,0xff}, //E{0xff,0xff,0xc1,0xbe,0xbe,0x9d,0xff,0xff}, //C{0xff,0xff,0x80,0xf7,0xf7,0x80,0xff,0xff}, //H{0xff,0xff,0xff,0x00,0x00,0xff,0xff,0xff}, //I{0xff,0x80,0xef,0xf7,0xfb,0x80,0xff,0xff}, //N{0x83,0xb7,0xb7,0x00,0xb7,0xb7,0x83,0xff}//中};
5、/***********************************************涯箨唁峦*******************//* 延时函数声明 *//******************************************************************//*void mdelay(uint t){ uchar n; for(;t>0;t--) for(n=0;n<125;n++) {;}}*/void mdelay(uint t){ uchar n; while(t--) { for(n=0;n<123;n++) {;} } }
6、/***********************************************涯箨唁峦*******************//* 主函数 *//******************************************************************/void main(){ uchar i; EA=1;//开总中断开关 TH0=0x3c;//设置初值50ms TL0=0xb0; ET0=1;//打开定时器中断 TR0=1;//启动定时器 TMOD=0x01;//设置定时器0为工作方式1 while(1) { if(a==1) { for(i=0;i<8;i++) { P0=saomiao[i]; //公共端,高电平有效 smg=1; //锁存 smg=0; P0=0xff; P0=xianshi[j][i];//数组显示 mdelay(2); } } else { for(i=0;i<8;i++) { P0=saomiao[i]; //公共端,高电平有效 smg=1; //锁存 smg=0; P0=0xff; P2=xianshi[j][i];//数组显示 mdelay(2); } } }}
7、/******************************************************************//* 定时器0 *//******************************************************************/void time0() interrupt 1{ TH0=0x3c; TL0=0xb0; count++; if(count==20) { j++; //间隔1s a++; count=0; if(j==18) j=0; if(a==2) a=0; }}
8、本经验只供参考,如有不足,还请见谅,如果有什么疑问请在下边留言,及时给你解答。。。