51单片机输入数字并数码管倒计时典型C语言代码
使用STC89C52RC单片机,外接数码管、蜂鸣器。改代码非常适合初学者学习借鉴。
#include
#define uchar unsigned char #define uint unsigned int sbit dula=P0^0; sbit wela=P0^1; sbit p17=P0^3; sbit p02=P0^2; sbit p32=P3^2; sbit p04=P0^4; uchar count; uint Sumnum; uint circle,circle1; uint time;
float top;//定义top为浮点型变量 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar temp,count;
uint bian,num,e,d,c,b,a; void delay(uchar x) { uchar a1,b1; for(a1=x;a1>0;a1--) for(b1=200;b1>0;b1--); }
void chaishu(uint sum1) { uint e1,b1,c1,d1; e=sum1/10000;////e=6* e1=sum1000;///e1=5535 d=e1/1000;///////d=5* d1=e100;//////d1=535 c=d1/100;////////c=5* c1=d10;///////c1=35 b=c1/10;/////////b=3* b1=c1;////////b1=5 a=b1;////////////a=5* }
void display(uint wan,uint qian,uint bai,uint shi,uint ge) { wela=1; P2=0xfe; wela=0; P2=0xff; dula=1; P2=table[wan]; dula=0; delay(3); P2=0xff; wela=1; P2=0xfd; wela=0; P2=0xff; dula=1; P2=table[qian]; dula=0; delay(3); P2=0xff; wela=1; P2=0xfb; wela=0; P2=0xff; dula=1; P2=table[bai]; dula=0; delay(3); P2=0xff; wela=1; P2=0xf7; wela=0; P2=0xff; dula=1; P2=table[shi]; dula=0; delay(3); P2=0xff; wela=1; P2=0xef; wela=0; P2=0xff; dula=1; P2=table[ge];
dula=0; delay(3); P2=0xff; }
///////////////////////////////////////switch void suanbian(uchar cont) {
switch (cont)//松开按键后对bian进行赋值 { case 1: { bian=num;
break;//跳出switch
}
case 2: { bian=(bian*10)+num; break;//跳出switch }
case 3: { bian=(bian*10)+num;
break;//跳出switch
} case 4: { bian=(bian*10)+num; break;//跳出switch } case 5: { bian=(bian*10)+num; break;//跳出switch } }//switch结束 }
///////////////////////////////////switch void keyscan() {
////////////////////////////////////////////////////////////////////////////////////////////////////以下测456 P1=0xfd;// P1口等于11111101 temp=P1;// temp等于P1口的值 if(P1!=0xfd)// 如果P1口不等于11111101 { delay(100);//延时100毫秒 if(P1!=0xfd)//再测一下如果P1口是否等于11111101 { 选择。
switch(temp)//如果不等于,那么检测temp取到的P1口的值并进入{
case 0xed: { num=4; count=count+1;
}//如果=0xed那么num设定为4 break;//跳出switch case 0xdd: { num=5; count=count+1;
}//如果=0xed那么num设定为5
break;//跳出switch case 0xbd: { num=6; count=count+1; }//如果=0xed那么num设定为6 break;//跳出switch }//switch结束
while(P1!=0xfd);//此处为一个等待按键松开的while语句:没松开就一直停在while中 suanbian(count); //chaishu(bian); }//第二个if结束 }//第一个if结束
///////////////////////////////////////////////////////////////////////////////////////////////////////////////以下测123 P1=0xfe;// P1口等于11111101 temp=P1;// temp等于P1口的值
if(P1!=0xfe)// 如果P1口不等于11111101 { delay(100);//延时100毫秒 if(P1!=0xfe)//再测一下如果P1口是否等于11111101 {
switch(temp)//如果不等于,那么检测temp取到的P1口的值并进入{
选择。
case 0xee: { num=1; count=count+1;
}//如果=0xed那么num设定为4 break;//跳出switch case 0xde: { num=2; count=count+1;
}//如果=0xed那么num设定为5 break;//跳出switch case 0xbe: { num=3; count=count+1;
}//如果=0xed那么num设定为6
break;//跳出switch }//switch结束 while(P1!=0xfe);//此处为一个等待按键松开的while语句:没松开就一直停在while中 suanbian(count); //chaishu(bian); }//第二个if结束 }//第一个if结束
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////以下测789 P1=0xfb;// P1口等于11111101 temp=P1;// temp等于P1口的值 if(P1!=0xfb)// 如果P1口不等于11111101 { delay(100);//延时100毫秒 if(P1!=0xfb)//再测一下如果P1口是否等于11111101 {
51单片机输入数字并数码管倒计时典型C语言代码



