1、电路图

单片机设计电子时钟参数有哪些(单片机初学者轻松入门之)(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、下载程序并调试

,