完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#define GPIO_KEY P1 unsigned char KeyValue; bit flag; void Delay10ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void KeyDown(void) { char a=0; GPIO_KEY=0x0f; //测试 if(GPIO_KEY!=0x0f) //读取按键是否按下 { Delay10ms();//延时10ms进行消抖 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 { //测试列 GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; } //测试行 GPIO_KEY=0XF0; switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测 { Delay10ms(); a++; } } } } void UsartConfiguration() { SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是4800的 TL1=0XF3; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } void main() { KeyDown(); UsartConfiguration(); while(1) { } } void Usart() interrupt 4 { SBUF = KeyValue; while(!TI); TI = 0; } |
|
|
|
代码正在审核中
|
|
|
|
请各位大神看看问题出在哪里?
|
|
|
|
你的流程错了,应该是在while(1)里进行键盘扫描,就是执行KeyDown();,在判断有按键按下时,向串口发送数据,串口的发送数据一般不在中断里,至少在你的这种情况下,发送数据是不在串口中断里的。
|
|
|
|
人中狼 发表于 2017-10-24 12:43 你好 改正之后现在计算机可以接收到数据 但是不是按照十进制数显示的 这里我的unchar型变量怎么转换成十进制发送呢 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
536 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
524 浏览 0 评论
477 浏览 1 评论
479 浏览 0 评论
关于RT-Thread studio添加freemodbus控件失败的问题
808 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11636 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 10:57 , Processed in 0.801107 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号