單片機(jī)C語(yǔ)言程序設(shè)計(jì):定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示
/* 名稱:定時(shí)器控制數(shù)碼管動(dòng)態(tài)
顯示
說(shuō)明:8 個(gè)數(shù)碼管上分兩組動(dòng)
態(tài)顯示年月日與時(shí)分秒,本例的
位顯示延時(shí)用定時(shí)器實(shí)現(xiàn)。
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//段碼,最后一位是“-”的段碼
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//待顯示的數(shù)據(jù):09-12-25 與 23-59-58(分兩組顯示)
uchar code Table_of_Digits[][8]={{0,9,10,1,2,10,2,5},{2,3,10,5,9,10,5,8}};
uchar i,j=0;
uint t=0;
//主程序
void main()
{
P3=0x80;
//位碼初值
TMOD=0x00; //計(jì)數(shù)器 T0 方式 0
TH0=(8192-4000)/32; //4ms 定時(shí)
TL0=(8192-4000)%32;
IE=0x82;
TR0=1; //啟動(dòng) T0
while(1);
}
//T0 中斷函數(shù)控制數(shù)碼管刷新顯示
void DSY_Show() interrupt 1
{
TH0=(8192-4000)/32; //恢復(fù)初值
TL0=(8192-4000)%32;
P0=0xff; //輸出位碼和段碼
P0=DSY_CODE[Table_of_Digits[i][j]];
P3=_crol_(P3,1);
j=(j+1)%8; //數(shù)組第 i 行的下一字節(jié)索引
if(++t!=350) return; //保持刷新一段時(shí)間
t=0;
i=(i+1)%2; //數(shù)組行 i=0 時(shí)顯示年月日,i=1 時(shí)顯示時(shí)分秒
}
擴(kuò)展閱讀:100 000s 以內(nèi)的計(jì)時(shí)程序
編輯:admin 最后修改時(shí)間:2018-05-18