單片機(jī)C語言程序設(shè)計(jì):100 000s 以內(nèi)的計(jì)時(shí)程序
/* 名稱:100 000s 以內(nèi)的計(jì)時(shí)程序
說明:在 6 只數(shù)碼管上完成 0~99 999.9s。
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//段碼
uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//6 只數(shù)碼管上顯示的數(shù)字
uchar Digits_of_6DSY[]={0,0,0,0,0,0};
uchar Count;
sbit Dot=P0^7;
//延時(shí)
void DelayMS(uint ms)
{
uchar t;
while(ms--) for(t=0;t<120;t++);
}
//主程序
void main()
{
uchar i,j;
P0=0x00;
P3=0xff;
Count=0;
TMOD=0x01;
TH0=(65536-50000)/256; //50ms 定時(shí)
TL0=(65536-50000)%256;
IE=0x82;
TR0=1; //啟動(dòng) T0
while(1)
{
j=0x7f;
//顯示 Digits_of_6DSY[5]~Digits_of_6DSY[0]的內(nèi)容
//前面高位,后面低位,循環(huán)中 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; //加小數(shù)點(diǎn)
DelayMS(2);
}
}
}
//T0 中斷函數(shù)
void Timer0() interrupt 1
{
uchar i;
TH0=(65536-50000)/256; //恢復(fù)初值
TL0=(65536-50000)%256;
if(++Count!=2) return;
Count=0;
Digits_of_6DSY[0]++; 位累加
for(i=0;i<=5;i++) //進(jìn)位處理
{
if(Digits_of_6DSY[i]==10)
{
Digits_of_6DSY[i]=0;
if(i!=5) Digits_of_6DSY[i+1]++; 如果 0~4 位則分別向高一位進(jìn)位
}
else break; //若某低位沒有進(jìn)位,怎循環(huán)提前結(jié)束
}
}
擴(kuò)展閱讀:用計(jì)數(shù)器中斷實(shí)現(xiàn)100以內(nèi)的按鍵計(jì)數(shù)程序
編輯:admin 最后修改時(shí)間:2018-05-18