(相关资料图)
1、//头文件:#include //变量定义:code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//表:共阳数码管 0-9 unsigned char l_posit=0;//显示位置unsigned char oldkey=0xff;//保存按键接口状态//引脚定义:sbit SMG_q = P1^0;//定义数码管阳级控制脚(千位)sbit SMG_b = P1^1;//定义数码管阳级控制脚(百位)sbit SMG_s = P1^2;//定义数码管阳级控制脚(十位)sbit SMG_g = P1^3;//定义数码管阳级控制脚(个位)sbit SPK = P1^5;//定义蜂鸣 器sbit JDQ = P1^4;//定义蜂鸣 器sbit key1 = P3^7;//定义按键1sbit key2 = P3^6;//定义按键2sbit key3 = P3^5;//定义按键3sbit key4 = P3^4;//定义按键4sbit key5 = P3^3;//定义按键5sbit key6 = P3^2;//定义按键6/***************///参数范围 0-65536void delay(unsigned int t){ while(t--);}//显示函数,参数为显示内容void display(unsigned int da){P0=0XFF;da=da%10000;switch(l_posit){case 0://选择千位数码管,关闭其它位SMG_q=0;SMG_b=1;SMG_s=1;SMG_g=1;P0=table[da/1000];//输出显示内容break;case 1://选择百位数码管。
2、关闭其它位SMG_q=1;SMG_b=0;SMG_s=1;SMG_g=1;P0=table[da%1000/100];break;case 2://选择十位数码管,关闭其它位SMG_q=1;SMG_b=1;SMG_s=0;SMG_g=1;P0=table[da%100/10];break;case 3://选择个位数码管,关闭其它位SMG_q=1;SMG_b=1;SMG_s=1;SMG_g=0;P0=table[da%10];break;}l_posit++;//每调用一次将轮流显示一位if(l_posit>3)l_posit=0;}//扫描键盘unsigned char ReadKey(void){unsigned char lkey=0;if((P3&0xfc)!=0xfc){//检测所有按键是否有按键按下SPK=0;//按键按下则蜂鸣器发声delay(10);//有按键按下则延时一段时间。
3、以消除按键拌动if(oldkey!=(P3&0xfc)){//检测按键未松开而且不是之前按下的按健就进入读键值,否则不作处理oldkey=P3&0xfc;//保存当前状态,为下一次扫描做判断。
4、请看上一行if(key1==0)lkey=1;//第一个键按下复值1else if(key2==0)lkey=2;//第二个键按下复值2else if(key3==0)lkey=3;//第三个键按下复值3else if(key4==0)lkey=4;//第四个键按下复值4else if(key5==0)lkey=5;//第五个键按下复值5else if(key6==0)lkey=6;//第六个键按下复值6}}else{oldkey=0xfc;//如果都没有按键按下,将复值初始状态SPK=1;//无按键按下则退出蜂鸣}return lkey;}//主函数void main(void) {unsigned int ldata=0;//作为显示的数据unsigned char i;for(i=0;i<8;i++) {P2<<=1;//用移位法将1向高位移入一位delay(25000);} P2=0xff;//LED灯测试完毕for(i=8;i>1;i--){P2>>=1;//用移位法将1向高位移入一位delay(25000);}for(i=1;i<2;i++) { P2=0xfe; delay(20000); P2=0xfd; delay(20000); P2=0xfb; delay(20000); P2=0xf7; delay(20000); P2=0xef; delay(20000); P2=0xdf; delay(20000); P2=0xbf; delay(20000); P2=0x7f; delay(20000); P2=0xbf; delay(20000); P2=0xdf; delay(20000); P2=0xef; delay(20000); P2=0xf7; delay(20000); P2=0xfb; delay(20000); P2=0xfd; delay(20000); P2=0xfe; delay(20000); P2=0xff;}P0=0;//数码管输出,准备测试每一位SMG_g=0;//测试个位数码管delay(38000);SMG_g=1;//关闭数码管。
5、测试个位完毕SMG_s=0;//十位delay(38000);SMG_s=1;//SMG_b=0;//百位delay(38000);SMG_b=1;//SMG_q=0;//千位数码管delay(38000);SMG_q=1;//关闭数码管,测试个位完毕SMG_b=0;//百位delay(38000);SMG_b=1;//SMG_s=0;//十位delay(38000);SMG_s=1;//P0=0;//数码管输出,准备测试每一位SMG_g=0;//测试个位数码管delay(38000); SMG_s=0;//十位delay(38000);SMG_b=0;//百位delay(38000);SMG_q=0;//千位数码管delay(38000);SMG_g=1;SMG_s=1;SMG_b=1;SMG_q=1;SMG_q=0;//千位数码管delay(38000);SMG_b=0;//百位delay(38000);SMG_s=0;//十位delay(38000);P0=0;//数码管输出。
6、准备测试每一位SMG_g=0;//测试个位数码管delay(38000);SMG_g=1;SMG_s=1;SMG_b=1;SMG_q=1;SPK=0;//测试蜂鸣器delay(3500);SPK=1;//关闭蜂鸣器delay(30000);SPK=0;//测试蜂鸣器delay(3500);SPK=1;//关闭蜂鸣器delay(30000);SPK=0;//测试蜂鸣器delay(50000);SPK=1;//关闭蜂鸣器delay(30000);SPK=0;//测试蜂鸣器delay(50000);SPK=1;//关闭蜂鸣器delay(30000);SPK=0;//测试蜂鸣器delay(50000);delay(50000);delay(50000);SPK=1;//关闭蜂鸣器delay(30000);JDQ=0;//测试继电器delay(50000);JDQ=1;//关闭继电器delay(50000);JDQ=0;//测试继电器delay(50000);delay(50000);delay(50000);JDQ=1;//关闭继电器for(i=0;i<8;i++) {P2<<=1;//用移位法将1向高位移入一位delay(50);}while(1){//循环扫描按键及显示switch(ReadKey()){//读取键值做以下相应处理case 1:ldata++;//1键显示内容加1P2=0xfe;break;case 2:ldata--;//2键显示内容减1P2=0xfc;break;case 3:ldata+=10;//3键显示内容加10P2=0xf8;break;case 4:ldata-=10;//4键显示内容减10P2=0xf0;break;case 5:ldata+=100;//5键显示内容加100P2=0xe0;break;case 6:ldata-=100;//6键显示内容减100 P2<<=1; break;}display(ldata);//显示相应的数值,这里用函数的形式调用显示delay(100);}}。
相信通过语c自戏范文这篇文章能帮到你,在和好朋友分享的时候,也欢迎感兴趣小伙伴们一起来探讨。
本文由用户上传,如有侵权请联系删除! 关键词: