小作业,仅供参考
接线如图所示,用的元器件有AT89C51、RESPACK-8,MATRIX-8X8-GREEN
程序代码如下:
#include <REGX51.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//行线
unsigned char code digittab[10][8]={ //字符数据
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0
{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00}, //1
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2
{0x00,0x00,0x2a,0x49,0x49,0x49,0x36,0x00}, //3
{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4
{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5
{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6
{0x00,0x00,0x40,0x40,0x4f,0x50,0x60,0x00}, //7
{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8
{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00},}; //9
//延时
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
int timecount;
char hang;
char zi;
void main()
{
TMOD=0x01;
TH0=(65535-3000)/256;
TL0=(65535-3000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
;
}
}
void t0(void) interrupt 1 using 0
{
TH0=(65535-3000)/256;
TL0=(65535-3000)%256;
P3=tab[hang];
P0=~digittab[zi][hang];
hang++;
if(hang==8)//行线到8,复位
{
hang=0;
}
timecount++;
if(timecount==333)
{
timecount=0;
zi++;
if(zi==10)
{
zi=0;
}
}
}
效果运行良好,快去交作业吧,哈哈哈哈哈!