1、电路图
2、程序设计
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0xbf}; //0~9,-的字形码
uchar miao,fen,shi,v; //定义秒、分钟、小时的变量,并初始化为 //0。后面会介绍为何为0。
void delay(uint m);
void main()
{ //定时计数器T0初始化程序
TMOD=0x01; //定时功能、工作方式1
TH0=(65535-50000)/256; //定时时间50ms
TL0=(65535-50000)%6;
EA=1; //开总中断
ET0=1; //开T0中断
TR0=1; //启动T0
while(1)
{
P0=a[miao]; //取秒的个位数作为字形码数组下标
P2=0x80; //右一位的位码输送给P2
delay(1); //短暂延时
P0=0xff;P2=0x00; //消隐
P0=a[miao/10]; //将秒的十位数的字形码输送给P0
P2=0x40; //右二位的位码输送给P2
delay(1);
P0=0xff;P2=0x00;
P0=a[10]; //将“-”的字形码输送给P0
P2=0x20; //右三位的位码输送给P2
delay(1);
P0=0xff;P2=0x00;
P0=a[fen]; //取分钟的个位数作为字形码数组下标
P2=0x10; //右四位的位码输送给P2
delay(1);
P0=0xff;P2=0x00;
P0=a[fen/10]; //将分的十位数的字形码输送给P0
P2=0x08; //将左四位的字形码输送给P2
delay(1);
P0=0xff;P2=0x00;
P0=a[10]; //将“-”的字形码输送给P0
P2=0x04;
delay(1);
P0=0xff;P2=0x00;
P0=a[shi];
P2=0x02;
delay(1);
P0=0xff;P2=0x00;
P0=a[shi/10];
P2=0x01;
delay(1);
P0=0xff;P2=0x00;
}
}
void delay(uint m)
{
uchar i;
while(m--)
for(i=0;i<120;i );
}
void t0() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%6; //重装初值
v ; //变量v为50ms的累加
if(v==20) //v=20时,50ms*20=1s
{
v=0;
miao ; //每过1s秒自加1,直到加到60清零
if(miao==60)
{
miao=0;
fen ; //每过60s,fen自加1,直到加到60清零
}
if(fen==60)
{
fen=0;
shi ;
}
if(shi==24) shi=0;
}
}
变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。如上述程序中,
void delay(uint m)
{
uchar i;
while(m--)
for(i=0;i<120;i );
}
i变量只适用于延时函数内部,所以i为局部变量。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。一个局部变量在被其它对象引用时,会是一个空值。但全局变量却不会出现这种情况。如上述程序中,变量miao、fen、shi、v均为全局变量,在定义时如果没有初始赋值,则自动初始化为0。
3、下载程序并调试
,