#include <AT89X52.H> #define uint unsigned int #define uchar unsigned char uchar code tabel[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};// 這個(gè)數(shù)組存放0~9 uint counter;//定義計(jì)數(shù)器,用來計(jì)量脈沖次數(shù) sbit wei_ge=P1^0; //定義引腳 sbit wei_shi=P1^1; sbit wei_bai=P1^2; sbit wei_qian=P1^3; sbit BUZZER=P2^0; void delay_(unsigned int j) { unsigned int k; while (--j!=0) { for (k=0;k<600;k++); } } /* 延時(shí)子程序 *******************************************************/ void delay(uint xms) { uint j; for(;xms>0;xms--) for(j=110;j>0;j--); } /* 數(shù)碼管掃描顯示子程序 ************************************************/ void shuma_show(uint date) { uchar ge,shi,bai,qian;// 數(shù)碼管顯示變量聲明 ge=date%10;// 個(gè)位數(shù)換算 shi=date/10%10;// 十位換算 bai=date/100%10;// 百位換算 qian=date/1000;// 千位換算 wei_ge=1;// 打開個(gè)位顯示 P0=tabel[ge]; // 數(shù)據(jù)輸入數(shù)碼管內(nèi) delay(2);// 延時(shí)顯示 2ms wei_ge=0;// 關(guān)閉個(gè)位顯示 wei_shi=1;// 打開個(gè)位顯示 P0=tabel[shi]; // 數(shù)據(jù)輸入數(shù)碼管內(nèi) delay(2);// 延時(shí)顯示 2ms wei_shi=0;// 關(guān)閉個(gè)位顯示 wei_bai=1;// 打開個(gè)位顯示 P0=tabel[bai]; // 數(shù)據(jù)輸入數(shù)碼管內(nèi) delay(2);// 延時(shí)顯示 2ms wei_bai=0;// 關(guān)閉個(gè)位顯示 wei_qian=1;// 打開個(gè)位顯示 P0=tabel[qian]; // 數(shù)據(jù)輸入數(shù)碼管內(nèi) delay(2);// 延時(shí)顯示 2ms wei_qian=0;// 關(guān)閉個(gè)位顯示 } /* 初始化子程序 **********************************************************/ void inti() { wei_ge=wei_shi=wei_bai=wei_qian=0;// 各 I/O 口初始化 TMOD=0x05;// 設(shè)置計(jì)數(shù)器 0 工作方式 1 ,為 16 位計(jì)數(shù)器,且為外部計(jì)數(shù) TH0=0;// 計(jì)數(shù)器高 8 位裝 0 TL0=0;// 計(jì)數(shù)器低 8 位裝 0 TR0=1;// 開計(jì)數(shù)器 } /* 主程序 ***************************************************************/ void main() { BUZZER=0; inti(); while(1) { counter=TH0*255+TL0;// 讀計(jì)數(shù)器數(shù)據(jù) } if(counter==1000) { TH0=TL0=0; } // 計(jì)滿清零 shuma_show(counter);// 數(shù)碼管掃描顯示 if((counter%100==0)&& counter!=0)// 逢百提醒 { BUZZER=1; delay(500); BUZZER=1; } } }
|