
buttonshake eliminationand anti-errotriggerprogramdesign
button shake elimination and anti-error trigger program design

0.回顾1)实验板上的电路图中P0传送位码,也传送段码。需要两个74573锁存器来区分段信号和位信号。2)显示数字时需要ucharcodeseg[l={0x3f,0x06,0x5b0x4f0x66,0x6d,0x7d,0x07,0x7f.0x6f);1//0~9段码,ucharcodewei]=0xf70xfb,0xfd,0xfe,0x7f,0x7b,0x7d0xef;l/控制某一位工作的位码·sbitweix=P2^7://位选控制●sbitduanx=P2^6;l/段选控制3)程序编写时0=wei[x];weix=1;weix=0;//选择工作的数码管P0=seg[y];duanx=1;duanx=0;//选择显示的数字
2 0.回顾 • 1)实验板上的电路图中P0传送位码,也传送段码。需要两个74573锁存器来区 分段信号和位信号。 • 2)显示数字时需要 • uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7 d,0x07,0 x7f,0x6f}; //0~9段码 • uchar code wei[]={0xf7,0xfb,0xfd,0xfe,0x7f,0x7 b,0x7 d,0xef}; //控制某一位工作 的位码 • sbit weix=P2^7;//位选控制 • sbit duanx=P2 ^6;//段选控制 • 3)程序编写时 • P0=wei[x];weix=1;weix=0;//选择工作的数码管 • P0=seg[y];duanx=1;dua nx=0;//选择显示的数字

请完成如下程序:·value是一个五位正整数。请编写程序实现显示value。假设初值为10000·思路:定义数组valueszll,存放value的每一位·程序框架:.ucharvalue[5]=b;:voidvaluepro()value[o]=;value[1]= ;value[2]=value[3]=;value[4]=;}
请完成如下程序: • value是一个五位正整数。请编写程序实现显示value。假设初值为 10000. • 思路:定义数组valuesz[],存放value的每一位 • 程序框架: • uchar value[5]={}; • void valuepro() • { value[0]=; • value[1]=; • value[2]=; • value[3]=; • value[4]=;}

程序:.#include.#defineuchar unsignedchar:ucharcodeseg[]=0x3f.0x06,0x5b.0x4f.0x66.0x6d.0x7d,0x07.0x7f.0x6f)://0~9段码:ucharcodeweil]={0xf7.0xfb.0xfd.0xfe.0x7f.0x7b,0x7d.0xef)://控制某一位工作的位码·sbitweix=P2^7://位选控制.sbitduanx=P2^6://段选控制unsigned int valuevoiddelay2ms()):void valuepro()):void display()0void main()value=10000:while(1)(valuepro();display():)
程序: • #i nclude • #defi ne uchar unsi gned char • uchar code seg[]={0x3f,0x06,0x5b,0 x4f ,0 x66,0 x6d,0 x7d,0 x07,0 x7f ,0x6 f} ; //0~9段码 • uchar code wei []={0xf7,0xfb,0 xfd ,0 xfe,0 x7 f,0 x7b,0 x7d,0 xef }; //控制某一位工作的位码 • sbi t wei x=P 2^7;//位选控制 • sbi t duanx=P 2^6;//段选控制 • unsi gned i nt value • voi d delay2ms(){} • voi d valuepro (){} • voi d di splay() • {} • voi d mai n() • { value=10000; • whi le(1){valuepro ();di spla y() ;} • }

:思考:2、若value为负值应该怎么显示·3、若value是小数呢?4、改写程序实现显示value,value为一个小数点后有两位的小数,初值为100.00请编程显示value
思考: • 2、若value为负值应该怎么显示。 • 3、若value 是小数呢? • 4、改写程序实现显示value,value为一个小数点后有两位的小数,初 值为100.00请编程显示value

按键程序value为一个小数点后有两位的小数,初值为100.00,试编程实现按键控制value的值,P3.0~P3.3有四个按键KEY1~KEY4。KEY1按下,值增加0.25,KEY2按下,减小0.25,KEY3按下value值变为100.00,KEY4按下,value值变为oVCKR4KRIKR3R1OK10K10K10KP36P34P35P37初始不导通K42初始导通初始导通初始不导通43
按键程序 value为一个小数点后有两位的小数,初值为100.00,试编程实现按键控 制value的值,P3.0~P3.3有四个按键KEY1~KEY4。KEY1按下,值增 加0.25,KEY2按下,减小0.25,KEY3按下value值变为100.00,KEY4 按下,value值变为0

按键抖动和误触发现象理想波形实际波形稳定闭合释放抖动按下抖动
按键抖动和误触发现象

消抖程序和防止误触发程序:voidkeypro()1· if(Key==0)rdelay10ms();1/抖动会持续5~10ms,延时10ms用于消抖if(Key==0) ()·while(Key==O);//一直等到按键松开再出程序,以防止误操作
消抖程序和防止误触发程序: void keypro() { • if(Key==0) • { • delay10ms(); // 抖动会持续5~10ms,延时10ms用于消抖 • if(Key==0) {} • while(Key==0); // 一直等到按键松开再出程序,以防止误操作 • } • }

程序框架:.#include.#defineucharunsignedcharucharcodesegll={0x3f.0x06.0x5b0x4f.0x660x6d.0x7d.0x070x7f0x6f):1/0~9段码:ucharcodewei[]=(0xf7.0xfb.0xfd.0xfe,0x7f.0x7b0x7d,0xef);//控制某一位工作的位码·sbitweix=P2^7://位选控制:sbitduanx=P2^6:1/段选控制. float valuevoiddelay2ms()():void keypro(().voidvaluepro()().voiddisplay().0void main()value=100.00:while(1)(keypro();valuepro();display():)
程序框架: • #inc lude • #define uc har uns igned c har • uc har c ode s eg[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x 07,0x7f, 0x6f}; //0~ 9段码 • uc har c ode w ei[]= {0xf7,0xfb,0xfd,0xfe,0x7f,0x7b,0x7d,0x ef}; //控制某一位工作的位码 • s bit w eix= P2^7;//位选控制 • s bit duanx= P2^6;//段选控制 • float value • void delay2m s (){} • void keypro(){} • void valuepro(){} • void dis play() • {} • void m ain() • { value= 100.00; • w hile(1){ keypro();valuepro();dis play();} • }

思考:。1.value为一个小数点后有两位的小数,初值为50.000,试编程实现按键控制alue的值P3.0~P3.3有四个按键KEY1~KEY4。KEY1按下,值增加0.125,KEY2按下,减小0.125,KEY3按下value值变为50.000,KEY4按下,value值变为0
思考: • 1. value为一个小数点后有两位的小数,初值为50.000,试编程 实现按键控制value的值,P3.0~P3.3有四个按键KEY1~KEY4。 KEY1按下,值增加0.125,KEY2按下,减小0.125,KEY3按下 value值变为50.000,KEY4按下,value值变为0