完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/*
将键盘的值以1200bps发送到计算机,在计算机上显示。 */ #include #define uchar unsigned char #define uint unsigned int uchar flag,temp,num,a; void init() { TMOD=0x20; //timer1 mode2 8bit reload TH1=0xE8; //1200bps TL1=0xE8; TR1=1; //open timer1 REN=1; //admit serial receive data SM0=0; //10bit asynchronous SM1=1; EA=1; ES=1; //open serial } void delay(uchar t) //delay function { uint i; for(t;t>0;t--) { for(i=115;i>0;i--); } } uchar keyscan(); void main() { init(); while(1) { ES=0; //怎样让串口只输出一个字符? SBUF=keyscan(); while(!TI); TI=0; ES=1; } } uchar keyscan() { P3=0xfe; //将P3第一口拉低 temp=P3; temp=temp&0xf0; //检测P3口 while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xee: num=1; break; case 0xde: num=2; break; case 0xbe: num=3; break; case 0x7e: num=4; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; //将P3第2口拉低 temp=P3; temp=temp&0xf0; //检测P3口 while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xed: num=5; break; case 0xdd: num=6; break; case 0xbd: num=7; break; case 0x7d: num=8; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; //将P3第3口拉低 temp=P3; temp=temp&0xf0; //检测P3口 while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb: num=9; break; case 0xdb: num=10; break; case 0xbb: num=11; break; case 0x7b: num=12; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; //将P3第4口拉低 temp=P3; temp=temp&0xf0; //检测P3口 while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7: num=13; break; case 0xd7: num=14; break; case 0xb7: num=15; break; case 0x77: num=16; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } return num; } |
|
相关推荐
9个回答
|
|
你先试试单独发送一个数据行不行
|
|
|
|
而且num的数值不管有没有按键按下你都返回,肯定每次都要发送到串口了,会一直发的
|
|
|
|
嗯,提醒到我了,我在主函数中加了一条while语句,虽然能单个显示了,但是有时候不正确 void main() { init(); while(1) { ES=0; while(keyscan()==keyscan()); SBUF=keyscan(); while(!TI); TI=0; ES=1; } } |
|
|
|
1.num 既然是全局变量,感觉没必要return吧。 2.keyscan函数中按键弹起后flag置1,无按键置0 3. out函数只是检测是否输出完成 4.main中while改动较大
评分
|
||||
|
||||
键盘消抖动处理了吗?
|
|
1 条评论
|
|
其实可以没按钮按下时不发送,有按下时再发送相应键码
|
|
|
|
有时候解决这些问题很简单,只是想太多导致问题复杂化了。我也不想提类似模块化编程这样的说法,只是理所当然的就会想到应该这样去编才对啊。比如:串口发送,就单独编一个发送数据的功能,加多一个使能EN,当EN满足时将数据送出。再比如:按键识别,就单独编一个按键识别的功能,完成消抖一类的功能,返回键值和按键被触发的事件(可选)。然后再把这两个功能结合起来就OK。我们都应该培养这种功能块(别人也称模块化)的编程方法,每一个功能块通过形参等接口完成信息传递,这样每一个模块都可以独立调试,发现问题也能很快知道哪一个功能块出现问题。
评分
|
||||
|
||||
模块化固然是好,只是现在实力没有,只能一步一步来了 |
|
|
|
学习了~~~~~~~~~~~~~~~~~~~
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
828 浏览 0 评论
824 浏览 0 评论
861 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
836 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1292 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11821 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 08:17 , Processed in 0.934205 second(s), Total 103, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号