完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
4×4键盘中(中断),当按键按下时,蜂鸣器响一声,然后8个led完成3种花式(每种亮三次)
代码 #include“reg51.h” #include“intrins.h” #define led P0 #define key P1 typedef unsigned int u16; typedef unsigned char u8; ***it key1=P3^2; //位定义 ***it buzzer=P2^0; //位定义 u16 keyvalue; //键值 void delay (u16 i) //延时函数(约10微秒) { while(i--); } void int0_init() //中断初始化函数 { EA=1; //中断总允许位 EX0=1; //外部中断0允许位 IT0=1; //下降沿触发 EX1=1; //外部中断1允许位 IT1=1; //下降沿触发 } u16 key_scan() //键盘扫描函数 { key=0xf0; //列扫描 if(key!=0xf0) { delay(1000); //消抖 if(key!=0xf0) { switch(keyvalue) //判断几列 { case(0xe0):keyvalue=1; break; case(0xd0):keyvalue=2; break; case(0xb0):keyvalue=3; break; case(0x70):keyvalue=4; break; } } } key=0x0f; //行扫描 if(key!=0x0f) { delay(1000); //消抖 if(key!=1000) { switch(key) //判断第几行 { case(0x0e):keyvalue=keyvalue;break; case(0x0d):keyvalue=keyvalue+4;break; case(0x0b):keyvalue=keyvalue+8;break; case(0x07):keyvalue=keyvalue+12;break; } } } return keyvalue; } void main() //主函数 { int0_init(); key_scan(); while(1); } void int0() interrupt 0 //中断服务函数 分组是0 { u16 i; if(key1==0) { delay(1000); //消抖 if(key1==0) { buzzer=0; //打开蜂鸣器 delay(100000); buzzer=1; for(i=0;i《3;i++) //三种led模式 { led=0xa5; delay(100000); led=~led; delay(100000); led=0xf0; delay(100000); led=~led; delay(100000); led=0xee; delay(100000); led=~led; delay(100000); } } } } 仿真图 元器件 AT89C51 (AT89C52) LED BUZZER (蜂鸣器) BUTTON (按键) AND (与门) POWER (电源) 备注 蜂鸣器的电压是12V 所以使用电压需要修改为12V。 |
|
|
|
只有小组成员才能发言,加入小组>>
2514 浏览 0 评论
1095浏览 2评论
705浏览 1评论
458浏览 0评论
200浏览 0评论
341浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 11:14 , Processed in 1.524428 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号