完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如下程序中,有按键1~4四个按键。按不同的键得到不同的操作。MPLAB调试中如何给keyzhi赋值,从而使程序进入不同的case内部?跪求高手指点!
#include "main.h" __CONFIG(0x00fC); void main (void) { status=one; initialization (); self_checking(); for(;;) { key_choice(); control (); } } void initialization (void) { ... } void interrupt TMR_0(void) { if(T0IF&T0IE) { ... } } //*************************************************// //按键扫描(返回键值) unsigned char KeyRead( void ) { unsigned char ReadData, keyzhi=0xff; ReadData =(PORTB|0x0f)^0xff; k_Trg = ReadData & (ReadData ^ k_Cont); k_Cont = ReadData; switch(ReadData) { case 0x10: if(k_Trg&0x10&key4bj) keyzhi=key1; break; case 0x20: if(k_Trg&0x20) keyzhi=key2; break; case 0x40: if(k_Trg&0x40) keyzhi=key3; break; case 0x80: if(k_Trg&0x80) keyzhi=key4; break; default:break; } return keyzhi; } //********************************************************// //按键处理 void key_choice(void) { switch(KeyRead()) { case key1: if(status==five) Light=LED1=LED2=Buzzer=0,status=one,counter_bj=0,key4bj=0; else if(status==six) LED1=LED2=LED3=LED4=Relay=1; else if(status==seven) status=seven; else { if(status==one||status==two||status==three||status==eight) { if(status==eight) status=two; if(status } if(status==two) key2bj=0,key1bj=0xff,key4bj=0,LED1=Light=1,time_bj=0xff,counter_bj=0,TMR0=0x00; if(status==three||status==eight) key1bj=0,LED1=Buzzer=Light=0,status=one,counter_bj=0,key4bj=0; } if(!key2bj&key1bj) longtime=0,TMR0=0x00,status=eight;key3bj=0; break; case key2: if(key1bj&&(status!=one))//若key1bj为1或status不为one, { key2bj=0xff; key1bj=0; if(Control) status=five,LED1=LED2=1,time1_bj=0xff,counter_fbj=0,TMR0=0x00,key3bj=0; else LED2=LED3=LED4=Relay=1,status=six,TMR0=0x00; } break; case key3: if(key2bj&&(status!=one)&&(status!=five)) { key2bj=0; status=one; LED1=LED2=LED3=LED4=Relay=Buzzer=Light=0; key3bj=0; } break; case key4: if(key2bj&&(status!=one)&&!key3bj) { longtime=0; TMR0=0x00; key3bj=0xff; } break; default:break; } } //*************************************************************// //蜂鸣器与灯显示 void control (void) { ... } //*************************************************// //开机自检// void self_checking(void) { ... } void delay(unsigned int m) { do{;}while(--m); } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2067 浏览 1 评论
3358 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2317 浏览 2 评论
2743 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
3989 浏览 5 评论
937浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6328浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 21:26 , Processed in 0.535097 second(s), Total 53, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号