单片机C语言程序设计:100 000s 以内的计时程序
时间:09-04 14:17 阅读:1036次
*温馨提示:点击图片可以放大观看高清大图
简介:名称:100 000s 以内的计时程序
说明:在 6 只数码管上完成 0~99 999.9s。
/*名称:100000s以内的计时程序
说明:在6只数码管上完成0~99999.9s。
*/
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
//段码
ucharcode
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//6只数码管上显示的数字
ucharDigits_of_6DSY[]={0,0,0,0,0,0};
ucharCount;
sbitDot=P0^7;
//延时
voidDelayMS(uintms)
{
uchart;
while(ms--)for(t=0;t<120;t++);
}
//主程序
voidmain()
{
uchari,j;
P0=0x00;
P3=0xff;
Count=0;
//计数器T0方式1
TH0=(65536-50000)/256;//50ms定时
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;//启动T0
while(1)
{
j=0x7f;
//显示Digits_of_6DSY[5]~Digits_of_6DSY[0]的内容
//前面高位,后面低位,循环中i!=-1亦可写成i!=0xff
for(i=5;i!=-1;i--)
{
j=_crol_(j,1);
P3=j;
P0=DSY_CODE[Digits_of_6DSY[i]];
if(i==1)Dot=1;//加小数点
DelayMS(2);
}
}
}
//T0中断函数
voidTimer0()interrupt1
{
uchari;
TH0=(65536-50000)/256;//恢复初值
TL0=(65536-50000)%256;
if(++Count!=2)return;
Count=0;
Digits_of_6DSY[0]++;位累加
for(i=0;i<=5;i++)//进位处理
{
if(Digits_of_6DSY[i]==10)
{
Digits_of_6DSY[i]=0;
if(i!=5)Digits_of_6DSY[i+1]++;如果0~4位则分别向高一位进位
}
elsebreak;//若某低位没有进位,怎循环提前结束
}
}