單片機(jī)C語言實(shí)例-331-數(shù)碼秒表設(shè)計(jì)
//實(shí)例65:數(shù)碼秒表設(shè)計(jì)
#include<reg51.h> // 包含51單片機(jī)寄存器定義的頭文件
unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//數(shù)碼管顯示0~9的段碼表
unsigned char int_time; //記錄中斷次數(shù)
unsigned char second; //儲(chǔ)存秒
/***********************************************************************
函數(shù)功能:快速動(dòng)態(tài)掃描延時(shí),延時(shí)約0.6毫秒
************************************************************************/
void delay(void)
{
unsigned char i;
for(i=0;i<200;i++)
;
}
/***********************************************************************
函數(shù)功能:顯示秒
入口參數(shù):k
出口參數(shù):無
************************************************************************/
void DisplaySecond(unsigned char k)
{
P2=0xfb; //P2.6引腳輸出低電平, DS6點(diǎn)亮
P0=Tab[k/10]; //顯示十位
delay();
P2=0xf7; //P2.7引腳輸出低電平, DS7點(diǎn)亮
P0=Tab[k%10]; //顯示個(gè)位
delay();
P2=0xff; //關(guān)閉所有數(shù)碼管
}
void main(void) //主函數(shù)
{
TMOD=0x01; //使用定時(shí)器T0
TH0=(65536-46083)/256; //將定時(shí)器計(jì)時(shí)時(shí)間設(shè)定為46083×1.085微秒
//=50000微秒=50毫秒
TL0=(65536-46083)%256;
EA=1; //開啟總中斷
ET0=1; //定時(shí)器T0中斷允許
TR0=1; //啟動(dòng)定時(shí)器T0開始運(yùn)行
int_time=0; //中斷次數(shù)初始化
second=0; //秒初始化
while(1)
{
DisplaySecond(second); //調(diào)用秒的顯示子程序
}
}
//********************************************************
//函數(shù)功能:定時(shí)器T0的中斷服務(wù)程序
//*******************************************************
void interserve(void ) interrupt 1 using 1
{
TR0=0; //關(guān)閉定時(shí)器T0
int_time ++; //每來一次中斷,中斷次數(shù)int_time自加1
if(int_time==20) //夠20次中斷,即1秒鐘進(jìn)行一次檢測(cè)結(jié)果采樣
{
int_time=0; //中斷次數(shù)清0
second++; //秒加1
if(second==60)
second =0; //秒等于60就返回0
}
TH0=(65536-46083)/256; //重新給計(jì)數(shù)器T0賦初值
TL0=(65536-46083)%256;
TR0=1; //啟動(dòng)定時(shí)器T0
}
更多詳情參考附件文檔
+08:00C133聯(lián)盟網(wǎng)1454.png (10.41 KB, 下載次數(shù): 2)
下載附件
保存到相冊(cè)
2022-3-29 10:12 上傳
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng) 回復(fù)
|