蓝桥杯单片机设计与开发笔记(来源于网络)
- 格式:docx
- 大小:385.76 KB
- 文档页数:10
蓝桥杯模拟知识点一、知识概述《蓝桥杯模拟知识点》①基本定义:蓝桥杯是一个面向全国大学生的计算机学科竞赛,其中模拟知识点呢,就是模拟一些实际遇到的计算机方面的情况或者问题。
比如说模拟一个系统的运行,或者模拟算法在特定场景下的执行过程。
②重要程度:在蓝桥杯竞赛以及计算机学科基础学习中可是相当重要的。
就好比建造房子的砖头,是构建扎实学科知识体系的重要组成部分。
好多题目可能会直接考到模拟相关的算法或者思维过程呢。
③前置知识:需要提前掌握编程语言的基础,像数据类型、变量的定义、简单的控制语句(如循环语句和条件判断语句)等。
另外,要对简单的数学知识,比如四则运算、逻辑运算等有基本的了解。
④应用价值:在实际开发软件或者对硬件进行测试的时候,模拟方法能够在不接触实际复杂环境的情况下,提前知道可能遇到的问题并且找出解决办法。
例如模拟无人驾驶汽车在不同路况下的行驶,就能在真实上路前对程序进行修正完善。
二、知识体系①知识图谱:在蓝桥杯的知识体系里,它处于偏重算法和程序设计的部分。
就像是大树上的一个比较粗壮的分枝,和数据结构、算法复杂度分析等知识点是树干和树枝的关系,相互关联影响。
②关联知识:和数据结构联系紧密,不同的数据结构在模拟的时候发挥不同作用。
比如用链表模拟一个任务的排队情况就比较高效,而用数组可能在某些特定顺序查询模拟的时候更合适。
还跟算法逻辑相关呢,比如排序算法和搜索算法可能就会在模拟场景中有不同的应用情况。
③重难点分析:- 掌握难度:对于初学者来说有点难度,要在脑海里构建虚拟的场景并且准确地让程序把这个场景“演”出来不容易。
- 关键点:准确设置模拟场景的规则,合理选择数据结构和算法进行模拟,并且对模拟结果进行正确的判断。
④考点分析:- 在考试中的重要性:挺重要的,经常以大题形式出现,几乎每年都可能会涉及。
- 考查方式:可能是直接给一个场景让你写模拟程序,或者给一部分代码让你补充完成模拟任务等。
三、详细讲解【理论概念类】①概念辨析:模拟就是在计算机里创建一个虚拟的模型来表示实际的事物或者过程。
第五届“蓝桥杯”全国软件和信息技术专业人才大赛个人赛总决赛决赛安排及注意事项详细说明一、时间安排2014年5月30日和31日个人赛总决赛(电子类)2014年5月31日个人赛总决赛(软件类)2014年6月1日下午颁奖典礼二、决赛报名1、学校报名:决赛报名方式和省赛报名方式基本相同,院校老师须用院校账号登录大赛官网报名系统,筛选省赛获得一等奖进决赛的选手,点击确定后录入决赛带队老师联系方式等相关信息,下载决赛报名表打印后盖章,再上传到报名系统,缴费,报名工作完成。
注意:决赛报名时可更改选手的决赛指导教师,报名完成之后将不能更改,请报名时谨慎决策。
2、个人报名:请登录学生账号点击个人决赛报名,缴费,报名工作完成。
注意:个人报名方式不能设臵指导教师,赛后也不能添加。
报名及缴费截止日期:5月5日。
决赛准考证在考前一周开放下载,请关注官网通知。
三、费用说明1、赛务费:为了便于开展决赛组织工作,决赛所有参赛选手须交纳赛务费300元,每人开具300元正式发票。
赛务费缴费支持的支付方式:公对公转账、邮局汇款、支付宝(学生个人报名只能使用支付宝)。
2、关于外地参赛师生食宿(可选、非强制):对于外地参赛师生,组委会代收100元/人,由会议公司开具发票900元/人,食宿由带队老师自行安排。
注意:各参赛院校只交100元/人即可,千万不要交900元/人,否则退款手续复杂,且耗时较长。
食宿费缴费支持的支付方式:邮局汇款、支付宝,不支持公对公转账。
3、费用收取:决赛交费方式与省赛报名费交费方式一样。
(1)银行转账账号:国信世纪人才服务(北京)有限公司开户银行:中国工商银行北京公主坟支行账户:0200004609200111786(2)邮局汇款收款人:刘佳,北京市海淀区万寿路27号工业和信息化部18#信箱,邮编100846。
(3)支付宝:在报名系统中缴费选择支付宝,然后通过网上银行支付完成交费。
(4)北京赛区可接受支票。
4、发票开具:和预赛相同,需要发票的院校请在报名系统中提交发票申请,赛务和食宿的发票项目均为会务费。
蓝桥杯单片机程序蓝桥杯单片机程序是一项技术竞赛,旨在锻炼和展示参赛选手在单片机程序设计方面的能力。
本文将从人类视角出发,以一位参赛选手的角度,来叙述他在蓝桥杯单片机程序竞赛中的心路历程。
一、前奏蓝桥杯单片机程序竞赛是一项备受瞩目的技术竞赛,每年都吸引着众多技术爱好者的参与。
作为一名热爱单片机开发的选手,我也投身其中。
比赛前,我翻阅了大量的学习资料,努力掌握了单片机的基本原理和开发技巧,为比赛做好了充分的准备。
二、比赛开始比赛开始了,我迅速进入状态,开始思考如何解决提出的题目。
这一次,题目要求我们设计一个温度监测系统,能够实时读取并显示当前环境的温度值。
我思考了一会儿,决定采用LM35温度传感器来获取环境温度,并通过数码管显示出来。
三、设计与实现我首先进行了电路设计,将LM35传感器与单片机进行连接。
接下来,我开始编写程序,通过单片机对传感器进行读取,并将读取到的温度值转换为合适的格式,最后通过数码管显示出来。
这个过程需要我熟练运用单片机的编程语言和相关函数库,以及对传感器的使用方法。
四、调试与优化在程序编写完成后,我进行了调试,发现一些小问题并及时修复。
我不断调整程序,优化算法,以提高系统的稳定性和精确度。
经过一番努力,我终于调试成功,整个系统能够准确地读取并显示当前环境的温度值。
五、总结与反思比赛结束后,我对自己的表现进行了总结与反思。
虽然在比赛中遇到了一些困难和挑战,但我通过不断学习和实践,最终成功解决了问题。
我深刻认识到在单片机程序设计中,不仅要具备扎实的理论基础,还需要灵活运用所学知识,勇于创新和解决问题的能力。
六、展望未来参加蓝桥杯单片机程序竞赛是我技术发展的一个重要里程碑。
通过这次比赛,我深入了解了单片机的应用领域和发展前景,并且对自己的能力和潜力有了更深的认识。
我将继续学习和探索单片机技术,不断提升自己的能力,为实现更多创新项目做好准备。
七、结束语蓝桥杯单片机程序竞赛是一场激烈而有趣的技术竞赛,参加其中需要我们具备扎实的理论基础和良好的实践能力。
1、P0口的复用PS1:上电后需给所有锁存器初始化(Y5,Y6初始化为0x00,其余初始化为0xFF)PS2:使用P0口时,按如下方式:禁用所有寄存器——P0口赋值——打开目标寄存器——禁用所用寄存器PS3:锁存器高电平选通,低电平关闭/*********************************************** @brief 初始化开发板* @param none* @return none************************************************/void initial_board(void){P0_BUS_COM com;P2 &= 0x1F; //禁用所有锁存器for(com = 3; com < 8; com++){if(com == UNL2003 || com == DIGITAL_BIT)P0 = 0x00;elseP0 = 0xFF;P2 |= com << 5;_nop_();P2 &= 0x1F;}/*********************************************** @brief 通过P0总线传输数据* @param com:总线占用的端口; databuf:传输的数据* @return none************************************************/void P0_BUS(unsigned char com, unsigned char databuf){P2 &= 0x1F; //禁用所有锁存器P0 = databuf;P2 |= com << 5;_nop_();P2 &= 0x1f;}PS4:数码管段码unsigned char code NUM[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};2、按键一、单按键单按键按如下流程图获取按键值:分层思想在按键上的应用:1、硬件层从I/0口获取按键信息映射到keybuf(按键寄存器)上2、驱动层根据keybuf的值,分析按键是否有效(是否有抖动产生的),并返回按键编码3、应用层对不同按键的响应分层的好处:如果按键连接的I/O变化,或者按键所在的I/O口不连续,只需修改硬件层的程序,驱动层和应用层则不受影响。
第七届蓝桥杯大赛2016年蓝桥杯个人赛(电子类)省赛单片机设计与开发科目准考证号工位号注意:只填写准考证号和工位号,否则试卷作废密封线-----------------------------------------------------------------------------第七届蓝桥杯全国软件和信息技术专业人才大赛个人赛(电子类)省赛单片机设计与开发科目竞赛时间:5小时题号一二三总分配分 10 30 60 100分得分“模拟风扇控制系统”设计任务书功能简述“模拟风扇控制系统”能够模拟电风扇工作,通过按键控制风扇的转动速度和定时时间,数码管实时显示风扇的工作模式,动态倒计时显示剩余的定时时间,系统主要由数码管显示、单片机最小系统、按键输入和电机控制保护电路组成,系统框图如图1所示:图1. 系统框图单总线驱动程序、CT107D 单片机考试平台电路原理图以及本题所涉及到的芯片数据手册,可参考计算机上的电子文档。
程序流程图及相关工程文件请以考生号命名,并保存在计算机上的考生文件夹中(文件夹名为考生准考证号,文件夹保存在监考员指定位置)。
DS18B20MCU按键输入 LED 指示灯数码管显示PWM 输出设计任务及要求1.工作模式设备具有“睡眠风”、“自然风”和“常风”三种工作模式可以通过按键切换,通过单片机P34引脚输出脉宽调制信号控制电机运行状态,信号频率为1KHz。
1.1“睡眠风”模式下,对应PWM占空比为20%;1.2“自然风”模式下,对应PWM占空比为30%;1.3“常风”模式下,对应PWM占空比为70%;2.数码管显示数码管实时显示设备当前工作模式和剩余工作时间(倒计时),如图2所示。
- 1 - 80 0 5 0 工作模式:睡眠风熄灭剩余工作时间:50秒图2.工作模式和剩余工作时间显示“睡眠风”状态下,对应数码管显示数值为1,自然风模式下,显示数值为2,常风模式下,显示数值为3。
3.按键控制使用S4、S5、S6、S7四个按键完成按键控制功能。
蓝桥杯单片机实训指导书蓝桥杯单片机实训指导书是许多学生在学习单片机编程和应用时的重要参考资料。
在这本指导书中,详细介绍了单片机的基础知识、编程方法和实际应用案例,帮助学生快速掌握单片机技术并在实践中不断提升。
本文将围绕着蓝桥杯单片机实训指导书展开讨论,重点介绍单片机在现代科技领域的应用现状和未来发展趋势。
首先,我们需要了解什么是单片机。
单片机是一种集成了处理器、存储器和输入输出设备的微型计算机,通常用于控制和监控各种电子设备。
在蓝桥杯单片机实训指导书中,我们可以学习到单片机的基本结构和工作原理,包括CPU、存储器、定时器、中断、串口通信等重要组成部分。
通过学习这些知识,学生可以深入了解单片机的内部机制,从而更好地利用单片机实现各种功能。
蓝桥杯单片机实训指导书还介绍了单片机编程的基本方法和技巧。
学生可以通过学习汇编语言、C语言等编程语言来实现单片机程序的开发和调试。
在实际应用中,单片机可以用于控制各种设备,如 LED灯、温度传感器、电机等,实现自动化控制和数据采集。
通过对单片机编程的学习,学生可以提高自己的编程能力和创新思维,为未来的科技创新打下坚实基础。
除了基础知识和编程技巧,蓝桥杯单片机实训指导书还介绍了单片机在各个领域的实际应用案例。
例如,在智能家居领域,单片机可以用于控制家电设备的开关和调节,实现智能化管理和节能效果。
在工业自动化领域,单片机可以用于自动化生产线的控制和监控,提高生产效率和质量。
在智能交通领域,单片机可以用于交通信号灯的控制和车辆管理,实现交通流畅和安全。
这些实际案例都体现了单片机在现代社会中的重要应用意义,为我们的生活和工作带来了便利和效益。
随着科技的不断发展,单片机技术也在不断创新和突破。
未来,单片机将更加智能化、高效化和多样化,应用范围将进一步扩大。
例如,随着人工智能和物联网技术的发展,单片机将更加智能化和联网化,可以实现设备之间的互联互通和智能控制。
同时,单片机的功耗和成本将进一步降低,推动单片机技术在各个领域的广泛应用。
第十二届蓝桥杯单片机设计与开发项目省赛第二部分程序设计试题(70分)1、基本要求1.1使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计与调试。
1.2选手在程序设计与调试过程中,可参考组委会提供的“资源数据包”。
1.3请注意:程序编写、调试完成后选手应通过考试系统提交完整、可编译的Keil工程文件压缩包。
选手提交的工程文件应是最终版本,要求Keil工程文件以准考证号(7位数字)命名,工程文件夹内应包含以准考证号命名的hex文件,该hex文件是成绩评审的依据。
不符合以上文件提交要求和命名要求的作品将被评为零分或者被酌情扣分。
举例说明:选手准考证号为1234567,hex文件应命名为:1234567.hex。
1.4请勿上传与作品工程文件无关的其它文件。
2、竞赛板配置要求2.1将IAP15F2K61S2单片机内部振荡器频率设定为12MHz。
2.2键盘工作模式跳线J5配置为KBD键盘模式。
2.3扩展方式跳线J13配置为IO模式。
2.4请注意:选手需严格按照以上要求配置竞赛板,编写和调试程序,不符合以上配置要求的作品将被评为零分或者被酌情扣分。
3、硬件框图数码管显示单元DS18B20IAP15F2K61S2单片机按键输入DA输出LED指示灯图1 系统硬件框图4、功能描述4.1功能概述1)通过获取DS18B20温度传感器的温度数据,完成温度测量功能。
2)通过PCF8591 AD/DA芯片完成DAC输出功能。
3)通过数码管完成题目要求的数据显示功能。
4)通过按键完成题目要求的显示界面切换和设置功能。
5)通过LED指示灯完成题目要求的指示功能。
4.2性能要求1)温度数据刷新时间:≤1秒。
2)DAC输出电压刷新时间:≤0.5秒。
3)按键动作响应时间:≤0.2秒。
4.3显示功能1)温度显示界面温度数据界面如图2所示,显示内容包括标识符C和温度数据,温度数据保留小数点后2位有效数字,单位为摄氏度。
图2 温度显示界面2)参数设置界面参数设置界面如图3所示,显示内容包括标识符P和温度参数,温度参数为整数,单位为摄氏度。
蓝桥杯编程笔记(亚洲一条龙整理)近期和我们实验室的小伙伴一起参加了第七届蓝桥杯单片机开发与设计组省赛,在这里将备赛期间的一些资料和经验总结一下,并分享给大家。
蓝桥杯单片机开发板是国信长天的CT107D单片机综合训练平台,个人感觉这块开发板的设计还是很不错的。
之前一直用的普中的板子,自己也做过一些最小系统板,练习了蓝桥杯的板子后根本不想再用普中的板子了。
普中的板子将单片机的学习划分成很多个模块,操作各个模块时需要手动接线,因此很适合初学者,而蓝桥杯的板子则不需要自己手动接线,开发板也没有模块划的划分,能够让我们对单片机编程有更深入的理解,适合进阶练习。
虽然CT107D中使用了很多的锁存器,电路看起来比较复杂,但是熟悉之后会发现自己对之前毫不在意的锁存器有了更深刻的认识,对于模块化编程与代码复用也有了更深入的认识。
通过这次比赛我对单片机编程也有了不同的认识,学到一个很重要的单片机编程套路就是通过定时器来实现前后台的编程思想,虽然以前也这么用过中断来处理一些事务,但是没有这么深刻的认识。
同时,学会看芯片文档对于你以后做开发会有很大的帮助。
总之,比赛过后有很多想要分享的东西,我会慢慢的写好每一篇博客。
在这一系列的笔记中,我会将自己蓝桥杯备赛期间写的一些代码以及做过的一些模拟题与大家进行分享,欢迎大家与我交流心得。
一、流水灯图1 LED部分电路原理图分析根据上图分析,要控制LED灯,首先我们需要了解74HC573锁存器,然后控制P0口的输出。
根据74HC573的真值表,当LE为高时,锁存器左边输入什么右边就输出什么,当LE为低时,锁存器输出的是上一次的值,即实现了锁存。
如下图:图2 74HC573真值表要实现流水灯则必须改变74HC573的输出,则必须将Y4C置为高,给P0赋值后再将Y4C置为低进行锁存。
我们在原理图中找到Y4C(如图3),图中WR与GND用跳帽连接起来,即WR为低电平0。
图3 74HC138与74HC02如图所示,Y4C由Y4和WR共同控制,74HC02是一个4路2输入或非门功能,WR为低电平,要使Y4C为高,则Y4必须为低电平,而Y4又由74HC138译码器控制。
74HC138译码器的真值表(如图4),要使得Y4为0,则三个输入端应该为100,即P2^7=1,P2^6=0,P2^5=0。
又只需要操作P2口的这三位,不需要配置其他的五位,所以P2端口应该配置为:P2 = ((P2&0x1f)|0x80);编写代码:while(1){for(i=0; i<8; i++){P2 = ((P2&0x1f)|0x80); //配置74HC573,使其不锁存P0 = ~(0x01<<i); //左移i位,按位取反P2 &= 0x1f; //再次配置74HC573,使其锁存delay(); //适当延时使LED亮得充分}}看到这里我们可能会感叹点个LED灯都这么麻烦,但是只要你把这个思路理清了,之后的蜂鸣器、继电器、数码管都是这个套路,因为他们共用的P0和P2端口,且都用到了上图3中的锁存器、138译码器和或非门。
这就实现了一个8位的I/O口进行复用的分时来控制多个设备,这种设计是比较好的。
二、蜂鸣器和继电器查看原理图找到继电器和蜂鸣器所在,然后可以看到(如图5)继电器和蜂鸣器的都是通过ULN2003来驱动的,ULN2003内部集成了7个达林顿管,可以有7路输入输出,这里不仅驱动了继电器和蜂鸣器,还有直流电机与步进电机。
同样,我们只需要控制Y5C和P0口,而Y5C的控制则与Y4C的控制大同小异,这里就不详细讲解了。
我们可以得到控制Y5C的正确配置P2端口的代码为:P2 = ((P2&0x1f)|0xA0);我们再看继电器和蜂鸣器的电路,当ULN2003输出低电平时继电器和蜂鸣器才打开,而ULN2003每一路输入输出都加有一个非门,所以ULN2003的输入为高电平时蜂鸣器继电器才打开,为低电平时关闭。
继电器对应的位为P0^4,蜂鸣器对应的位为P0^6,我们将P0口的这两位赋为1时,即P0=0x50时,两个设备均打开。
图5 蜂鸣器与继电器电路原理图代码部分:P2 = ((P2&0x1f)|0xA0); //关闭锁存P0 = 0x10; //蜂鸣器关、继电器开P2 &= 0x1f; //打开锁存数码管显示几乎是每次蓝桥杯单片机设计与开发组竞赛的必考部分,相对于使用LCD1602作为显示设备,使用数码管来显示能够更好的考察参赛选手的单片机基本功,因为CT107D 开发平台的设计使得数码管的显示不仅牵扯到数码管显示的基本内容,还涉及到74HC573锁存器,74HC02异或门,74HC138译码器,以及中断的知识,所以这是值得我们重视的一个部分。
一、原理分析根据CT107D的原理图我们可以看出,数码管显示同样涉及到74HC573、74HC138和74HC02,这与上一节中的LED灯、继电器和蜂鸣器的控制大同小异。
如下图,蓝色标注为位选控制端口,由锁存器U6来控制,需配置红色标注的Y6C来控制锁存;黄色标注为段选控制端口,由锁存器U7来控制,需配置红色标注的Y7C来控制锁存。
而,控制Y6C与Y7C则需要通过74HC18和74HC02来进行控制,如下图,Y6C由Y6和WR共同控制,74HC02是一个4路2输入或非门功能,WR为低电平,要使Y6C为高,则Y6必须为低电平,即74HC138译码器的三个输入端应该为100,即P2^7=1,P2^6=0,P2^5=0。
又只需要操作P2口的这三位,不需要配置其他的五位,所以P2端口应该配置为:P2 =((P2&0x1f)|0xC0)。
同理,控制Y7C时P2端口应该置为:P2 = ((P2&0x1f)|0xE0)。
二、示例程序这里采用前后台的编程思想,即使用定时器中断来处理显示部分,作为前台,而逻辑处理与数据采集部分等则在主程序流程中来完成,作为后台。
在下面这段程序中,定时器每隔2ms 中断一次执行一次显示程序,然后继续执行主程序的任务,我们只要修改需要显示的数组即可实现显示不同的数值,使显示部分模块化,程序显示部分只提供外部接口(数组),不修改显示函数,这样不容易出错,而且能够使显示更方便。
#include "reg52.h"#define uchar unsigned char#define uint unsigned intuchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xb f}; //共阳极数码管段选编码数组uchar dspbuf[] = {10,10,10,10,10,10,10,10}; //显示数据的数组uchar dspcom = 0; //位选控制变量void display() //显示函数{P2 = ((P2&0x1f)|0xE0); //段选消隐P0 = 0xff;P2 &= 0x1f;P2 = ((P2&0x1f)|0xC0); //位选P0 = 1<<dspcom; //共阳极数码管位选P2 &= 0x1f;P2 = ((P2&0x1f)|0xE0); //段选P0 = tab[dspbuf[dspcom]];P2 &= 0x1f;if(++dspcom == 8){ //位选编码,循环显示8位dspcom = 0;}}void main(){TMOD = 0x01; //定时器0工作方式1TH0 = (65536-2000)/256; //初始化TL0 = (65536-2000)%256;ET0 = 1; //开定时器0中断允许位EA = 1; //开总中断TR0 = 1; //开定时器0while(1){dspbuf[0] = 1; //要显示不同的数据只需要修改此数组的值即可dspbuf[1] = 2;dspbuf[2] = 3;dspbuf[3] = 4;dspbuf[4] = 5;dspbuf[5] = 6;dspbuf[6] = 7;dspbuf[7] = 8;}}void timer0() interrupt 1//定时器0中断服务函数{TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;display(); //2ms显示一次}按键几乎也是每次蓝桥杯单片机设计与开发组竞赛的必考部分,因为这是CT107D开发平台上仅有的输入设备之一,而且按键也是单片机基础开发中常见的器件。
一、独立按键1、原理分析用跳帽把J5的引脚2和引脚3接起来,即可使用4个独立按键(如下图):S7,S6,S5,S4。
按键的一端接到GND,另一端接到P3口的低四位,所以我们只要检测连接按键的P3口的某一位是否为低电平即可确定某一按键是否被按下。
但是,因为存在抖动,所以需要进行消抖处理。
总之,独立按键的按键检测基本流程为:检测是否有键按下,延时消抖,再次检测是否有键按下,执行按键按下后的相应操作,松手检测。
2、示例程序sbit S7=P3^0;sbit S6=P3^1;sbit S5=P3^2;sbit S4=P3^3;//这里以S4为例if(S4==0) //检测S4是否被按下{delay_ms(2); //延时消抖if(S4==0) //再次检测S4是否被按下{//这里执行按键后需要执行的操作}while(S4==0); //松手检测}二、矩阵键盘1、原理分析用跳帽把J5的引脚1和引脚2接起来,即可使用矩阵键盘(如下图)。
矩阵键盘的检测常常采用行列扫描法。
先进行行扫描,给P3口赋值为0x0f,当有键按下时P3口低四位的某一位的高电平会拉低,通过检测P3口高低电平的变化即可确定是哪一行的按键被按下,然后再给P3口赋值为0xf0,同理,当有键按下时P3口的高四位的某一位的高电平会被拉低,通过检测P3口的电平变化即可确定是哪一列的按键被按下,由行列交叉可以确定唯一的一个按键。
2、示例程序先确定行来得到键值的临时值,待确定列后将键值的临时值加上列值得到最终的键值。
当然,这里的按键编号可以进行合理的自定义,不需要和以下程序完全一样。
#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define temp P3uchar key_value = 0;void keyscan() //按键扫描函数{temp = 0x0f;if(temp!=0x0f) //扫描行{delay_ms(10); //延时消抖switch(temp){case0x0e: key_value = 0; break;case0x0d: key_value = 4; break;case0x0b: key_value = 8; break;case0x07: key_value = 12; break;}temp = 0xf0; //扫描列if(temp == 0x70) key_value + = 0; while(temp == 0x70); //松手检测if(temp == 0xb0) key_value + = 1; while(temp == 0xb0); //松手检测if(temp == 0xd0) key_value + = 2; while(temp == 0x0d); //松手检测if(temp == 0xe0) key_value + = 3; while(temp == 0x0e); //松手检测}}因为CT107D单片机开发平台采用IAP15F2K61S2单片机,使用的是转接板,由转接板原理图知矩阵键盘接的是P3口的低6位与P4.2、P4.4口,即用P4.2代替了P3.6,P4.4代替了P3.7,所以需要修改部分代码。