完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的飞思卡尔xs128单片机建工程的时候用了浮点数类型,编了一个矩阵键盘的程序。程序能编译没出错但是却按下键盘,在数据口上没有发现键值的变化情况,请问如何解决。程序如下:
#include #include "derivative.h" #define LEDCPU PORTK_PK4 #define LEDCPU_dir DDRK_DDRK4 unsigned char flag1=0; //数字标记位 //unsigned char flag11=0; //重新设置键标记位 //unsigned char flag12=0; //小数点标记位 //unsigned char flag13=0; // *标记位 unsigned char flag14=0; //"小数"标记位 unsigned char flag15=0; // "确认键"标记位 unsigned char flag16=0; //"设置键"标志位 float a=11.2,b=10.1; //long table2[19]; //存储结果的数组,20就出错? float s,s1,s2; //s为计算结果,a为第一个数,b为第二个数,num1对应为键对应的值为显12864显示服务 unsigned char num1; void delay_10us(long m) { // 延时m*10us //while(m--); unsigned long a; for(a=15*m;a>0;a--); } //------------------------------------ //函数名称:delay_1ms //函数功能:1ms延时 //入口参数:usigned int t //出口参数:无 void delaynms(unsigned int t) //延时t*1ms { unsigned int i; for(i=0;i } /********************************/ /*************************************************************/ /* 初始化4X4矩阵键盘 */ /*************************************************************/ //函数名称:KEY_Init //函数功能:KEY初始化 //入口参数:无 //出口参数:无 void KEY_Init() //LCD初始化 { DDRH=0xf0; //0输入。1输出 PERH=0xff; //1设置上拉/下拉电阻 PPSH=0xf0; //0上拉1下拉 //PIEH=0x00; //PORTA=0xff; //PTH=0xff; } /*********************************************************** 函数名称:Kbscan 函数功能:键盘扫描程序 入口参数:无 出口参数:键值 备 注: ***********************************************************/ void kbscan(void) { uchar temp; DDRH=0xf0; //0输入。1输出 PTH=0xef; //将第4lie线置低电平,其余线全为高电平 DDRH=0xf0; //0输入。1输出 temp=PTH; temp=temp&0x0f; if(temp!=0x0f) { delaynms(10); temp=PTH; temp=temp&0x0f; if(temp!=0x0f) { temp=PTH; switch(temp) { case 0xe7: ;flag15=1;break; //1hang case 0xeb:num1=1;flag1=1;break; case 0xed:num1=4;flag1=1;break; case 0xee:num1=7;flag1=1;break; } while(temp!=0x0f) //松手检测 { temp=PTH; temp=temp&0x0f; } } } DDRH=0xf0; //0输入。1输出 PTH=0xdf; DDRH=0xf0; //0输入。1输出 temp=PTH; temp=temp&0x0f; if(temp!=0x0f) { delaynms(10); temp=PTH; temp=temp&0x0f; if(temp!=0x0f) { temp=PTH; switch(temp) { case 0xd7:num1=0;flag1=1;break; //右下角 case 0xdb:num1=2;flag1=1;break; case 0xdd:num1=5;flag1=1;break; case 0xde:num1=8;flag1=1;break; } while(temp!=0x0f) { temp=PTH; temp=temp&0x0f; } } } DDRH=0xf0; //0输入。1输出 PTH=0xbf; DDRH=0xf0; //0输入。1输出 temp=PTH; temp=temp&0x0f; if(temp!=0x0f) { delaynms(10); temp=PTH; temp=temp&0x0f; if(temp!=0x0f) { temp=PTH; switch(temp) { case 0xb7: ;flag16=1;break; //右下角 case 0xbb:num1=3;flag1=1;break; case 0xbd:num1=6;flag1=1;break; case 0xbe: ;flag14=0;break; } while(temp!=0x0f) { temp=PTH; temp=temp&0x0f; } } } DDRH=0xf0; //0输入。1输出 PTH=0x7f; DDRH=0xf0; //0输入。1输出 temp=PTH; temp=temp&0x0f; if(temp!=0x0f) { delaynms(10); temp=PTH; temp=temp&0x0f; if(temp!=0x0f) { temp=PTH; switch(temp) { case 0x77: ;flag14=1;break; //右下角 case 0x7b:num1=9 ;flag1=0;break; case 0x7d: ;flag15=0;break; case 0x7e: ;flag16=0;break; } while(temp!=0x0f) { temp=PTH; temp=temp&0x0f; } } } } /*********************************存储按下的数字键函数*****************8*********************/ void scan() { if(flag16==1) // 只有按下"设置键" 才能进入 { if(flag1==1) { s1=s1*10+num1; flag1=0; } if(flag14==1){ if(flag1==1){ s2=num1*0.1; } } } if(flag15==1){ // 按下"确认键"设置参数 s=s1+s2; b=s; } if(flag16==0){ s=0; s1=0; s2=0; num1=0; } } void bijiao(){ if(a>b) LEDCPU=0; else LEDCPU=1; } void main(void) { LEDCPU_dir=1; KEY_Init(); while(1){ kbscan(); scan(); bijiao(); } } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
1925个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36408 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4689 浏览 1 评论
6095 浏览 1 评论
6800 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4240 浏览 0 评论
638浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
634浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
636浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
720浏览 2评论
829浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 22:03 , Processed in 1.188605 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号