這次給大家分享一個三位數碼管實現0-999倒計時器
所需元器件如下:
AT89C51芯片 *1
12MHz晶振 *1
33pF電容 *2
10uF電解電容 *1
10K電阻 *1
200Ω電阻 *21
單位7段數碼管 *3
代碼如下:
#include"reg51.h"//此文件中定義了單片機的一些特殊功能寄存器
void DelayMs(unsigned int x);//延時函數聲明
unsigned char code Ledcode[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//定義字符型數組
void DelayMs(unsigned int x)//定義延時函數
{
unsigned char i;
while(x--)
{
for(i=0;i<120;i++);//大約1ms
}
}
void main()
{
unsigned int i,disp;//定義兩個無符號整型變量i 和 disp
while(1)
{
disp=999;//設置999的倒計時
for(i=0;i<1000;i++)
{
P0=Ledcode[disp/100];//把百位數的值賦給P0口,即第一位數碼管
P2=Ledcode[disp/10%10];//把十位數的值賦給P2口,即第二位數碼管
P3=Ledcode[disp%10]; //把個位數的值賦給P3口,即第三位數碼管
disp--;//實現倒計時自減
DelayMs(200);//延時200ms
}
}
}
仿真電路圖如下:
程序可以稍做修改,改變disp的值可以實現想要任何數值的初始值,還可以把倒計時改成累加器的形式,只需要改變disp的初始值,還有把disp–改成disp++,數值隨着時間的變化有序增加,改變DelayMs的值可以實現時間間隔的增減。