基于AT89C51单片机
用单片机上两个数码管显示;用按键实现计数器启动功能、计数满99后嗡鸣器报警,计数器自动清零;
用按键控模拟计数脉冲加、减;
#include <REGX52.H>//头文件
sbit w1 = P1^0;sbit w2 = P1^1;sbit w3 = P1^2;sbit w4 = P1^3;
sbit d1 = P0^0;sbit d2 = P0^1;sbit d3 = P0^2;sbit d4 = P0^3;
sbit d5 = P0^4;sbit d6 = P0^5;sbit d7 = P0^6;sbit d8 = P0^7;
sbit K1 = P3^2;sbit K2 = P3^3;sbit K3 = P3^4;sbit K4 = P3^5;
sbit K5 = P3^6;sbit K6 = P3^7;sbit S = P1^7;sbit J = P1^6;
char code led_wei[]={0xfe,0xfd,0xfb,0xf7};
unsigned char led[]={
0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90, //"9"
0x88, //"A"
0x83, //"B"
0xC6, //"C"
0xA1, //"D"
0x86, //"E"
0x8E, //"F"
0x89, //"H"
0xC7, //"L"
0xC8, //"n"
0xC1, //"u"
0x8C, //"P"
0xA3, //"o"
0xBF, //"-"
0xFF, //
};
void delay(int i)//延时子程序
{int k;//定义字符k
for(k=0;k<i;k++);//for循环
}
void display(int j)//数码管显示子程序
{ int qian, shi,ge,bai; //定义字符qian,shi,ge,bai
qian=j/1000;//j值除1000取整赋值给字符qian
bai=j%1000/100;//j值的百位数字赋值给字符bai
shi = j%100/10; //j值的十位数字赋值给字符shi
ge = j%100%10;//j值的个位数字赋值给字符ge
P0 = 0xff;//P0←0xff(数码管全灭)
P1 =led_wei[1] ;//数码管十位显示
P0 = led[shi];//十位显示数字
delay(200);//延时
P0 = 0xff;//P0←0xff(数码管全灭)
P1 =led_wei[0] ;//数码管个位显示
P0 = led[ge];//十位显示数字
delay(200); //延时
}
void soft_reset(void)//复位子程序
{((void(code*)(void))0)();}
void main()
{ int m=0;//定义m=0
while(1)//循环
{ if(K6==0)//判断按键是否按下
{
delay(5);//延时
if(K6==0)//判断按键是否按下
{
m++;//m自增1
while(!K6);//判断按键是否抬起
}
}
if(K5==0)//判断按键是否按下
{
delay(5);//延时
if(K5==0)//判断按键是否按下
{
m--;//m自减1
while(!K5);//判断按键是否抬起
}
}
display(m);//
if(m==99)//判断数码管显示99时报警并复位
{
S=0;//蜂鸣器响起
delay(20000);//延时
S=1;//蜂鸣器关闭
soft_reset();//复位
}
}}