本帖最后由 雷影少年 于 2012-7-4 16:09 编辑
经过各位大神提点,本菜鸟又啃了几天书,今天试着写下外部程序,还是写不好请各位大神指点下
下[code]面是源程序:
/*数字时钟程序*/
#include<reg51.h>
#include"display.c" //显示子程序
#include"time.c" //时钟更新子程序
u8 count;
void main(void)
{
EA =1; //开中断
ET0 =1;
TMOD =0x01;
TH0 =-(50000/256);
TL0 =-(50000%256);
TR0 =1;
while (1)
{
// count=time(count); //调用时中更新子程序
time(count);
delay(10); //延时
}
}
void time50() interrupt 1 //每50ms中断一次
{
TH0=-(50000/256);
TL0=-(50000%256);
count++;
}
/*时钟显示子模块*/
typedef unsigned char u8 ;
/*初始化数组 时间显示
选择数码管位(从左至右)
数码管显示缓冲*/
u8 code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
u8 code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 seg1[]={0,1,2,3,4,5,6,7};
/*延时子程序*/
void delay(u8 x)
{
u8 a,b;
for (a=x;a>0;a--)
for (b=100;b>0;b--);
}
/*显示子程序*/
void display(u8 sec,min,hour)
{
u8 i;
seg1[7] =sec%10; //将时间放至缓冲区
seg1[6] =sec/10;
seg1[5]=10;
seg1[4] =min%10;
seg1[3] =min/10;
seg1[2]=10;
seg1[1] =hour%10;
seg1[0] =hour/10;
for (i=0;i<8;i++) // 动态显示
{
P0 =0xff;
P2 =wei;
P0 =seg[seg1];
delay(10);
}
}
/*时间更新模块*/
//u8 time(count)
void time(count)
{
static u8 sec =50; //装载时钟秒初始值
static u8 min =59; //装载分初始值
static u8 hour =23; //装载时初始值
if (count==20)
{
count =0;
if ( ++sec>=60) //秒更新
{
sec=0;
if (++min>=60) //分更新
{
min =0;
if (++hour>=23) //时更新
hour =0;
}
}
}
display(sec,min,hour); //调用显示子程序
// return count; //返回count值
}
]count我定义的是全局变量,在调用time子程序的时如果子程序的count发生变化,主程序中的count为什么不变化啊?
如果把//return count这句取消注释,后时钟能够走时、进位,但是速度大约是正常时间的1/15;实在不明白是为什么?
求各位大神指点啊~[code] |