独立按键检测很简单.就是检测单片机的i/o口哪个是低电平然后就能判断是哪个键被按下了.当然还要去抖动,也就是要延时.不然会有很多误动作.
效果图:
电路图:
说下程序实现的功能:
SW16是数码管+1
SW17是数码管-1
SW18是数码管清零
SW19是数码管自动+1
源代码
#include #define uchar unsigned char #define uint unsigned int sbit key1=P3^2; sbit key2=P3^3; sbit key3=P3^4; sbit key4=P3^5; sbit P20=P2^0; sbit P21=P2^1; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; void delayms(unit); uchar numt0,num; void display(uchar numdis) //数码管扫描 {undefined uchar shi,ge; shi=numdis/10; ge=numdis%10; P20=0; P0=table[ge]; delayms(5); P20=1; P21=0; P0=table[shi]; delayms(5); P21=1; } void delayms(uint xms) //延时 {undefined uint i,j; for(i=xms;i>0;i--) for (j=110;j>0;j--); } void init() 初始化函数 {undefined TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=0; } void keyscan() //独立按键扫描函数 {undefined if (key1==0) {undefined delayms(10); if(key1==0) {undefined num++; if(num==60) num=0; while(!key1); } } if(key2==0); {undefined delayms(10); if(key2==0) { if(num==0) num=60; num--; while(!key2); } } if(key3==0) {undefined delayms(10); if(key3==0) {undefined num=0; while(!key3); } } if(key4==0) {undefined delayms(10); if(key4==0) {undefined while(!key4); TR0=~TR0; } } } int main(void) //主函数 {undefined init(); while(1) {undefined keyscan(); display(num); } } void T0_time() interrupt 1 //定时器中断服务 {undefined TH0=(65536-45872)/256; TL0=(65536-45872)%256; numt0++; if(numt0==20) {undefined numt0=0; if(num==60) num=0; } }
上一篇:矩阵键盘+数码管动态显示
下一篇:独立按键c语言代码,C51独立按键的识别示例程序
推荐阅读最新更新时间:2024-11-16 22:04
推荐帖子
- MSP430不同时钟怎么选择时钟源?
- 在MSP430中时钟源有低频振荡器,高频振荡器和数控振荡器,时钟有主时钟,子系统时钟,和辅助系统时钟,怎么配置时钟才能选择我所需要的时钟源啊?MSP430不同时钟怎么选择时钟源?你所说的前三个是时钟源,后三个是时钟系统。建议好好看看RM里面关于时钟的这一章,弄清楚各个时钟的关系和区别。armcu发表于2014-8-1617:01你所说的前三个是时钟源,后三个是时钟系统。建议好好看看RM里面关于时钟的这一章,弄清楚各个时钟的关系和... 我的意思是比如我要把主时钟的时
- 东方龙未名 微控制器 MCU
- AD603出现底部失真,不知什么原因造成的。
- 按照AD603手册上的图画pcb,只改变了部分电容的大小,下图已标出。https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=562358&page=1#pid2233599这是之前仿真的帖子,和手册里给的一样。pcb里电阻R4和R7没焊上去,这两电阻只与增益倍数范围有关。现在的问题是用示波器看波形发现输出波形底部有失真。如下图,底部程斜波上升。增大脉冲宽度后底部和顶部均有失真。减小频率后发现底部出现震荡。增大频率后
- 魔双月壁 模拟电子
- 09年在全国电子设计大赛论文写作要求
- 09年在全国电子设计大赛论文写作要求09年在全国电子设计大赛论文写作要求我下下来看看但是刚刚朋友也传了一个给我看看是不是一样的我也下来看看!我下下来看看但是刚刚朋友也传了一个给我看看是不是一样的我要了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~下来看看!!!!!!!!!!!!谢谢楼主啦正做着呢,好东西,谢谢分享!谢了,收下,正急用‘没芯币下了没aishangxinhsiua:\'(:\'(看看怎么样
- Rick37 电源技术
- 想学点前沿技术
- 想学点前沿技术,想到了可以去学些外文资料,可惜很多专业词汇不懂。不知有没有一些外文资料,或者专业英语书的介绍!想学点前沿技术想学前沿技术的关键是先打好基础,盲目去看外文资料的意义很有限,专业词汇的理解首先要建立在对中文术语的掌握和理解上,这也是属于基础性的知识,所以还是绕不开打好基础。
- wumigai 单片机
- 如何使用CAD的自动追踪功能
- CAD自动追踪功能怎么使用?CAD中自动追踪功能可以很方便的画一条距离某一点特定距离的垂线,接下来看看CAD自动追踪的详细使用教程,需要的朋友可以参考下。1、首先打开CAD软件,并新建一个图纸,先画了一条长40mm的线段2、正常的情况下,选择再画直线,从已画线段的左端点出发,会有自动追踪的标记。如图,箭头所指的数字是左端点到鼠标的距离。3、这是可以直接用键盘输入距离,要画线段的起点就确定了。我输入的是10,距离也恰好为10.4、但是有时候自动追踪的功能不能用了,
- 浩辰CAD PCB设计
- 保安队HMI开发板-STM32H7S7(焊接篇)
- MCU:STM32H7S7NORFLASH:MX25UW256PSRAM:APS256XXNEMMC:THGBMJG6C1LBAIL保安队HMI开发板-STM32H7S7(焊接篇)STM32H7S不是今年刚出的芯片吗?这就有人用上了? 趁热乎
- bloody41760 stm32/stm8
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BD4853 的参考设计
- ADR525A 2.5 Vout 高精度并联模式基准电压源的典型应用
- 使用 Analog Devices 的 LT1085CM-3.6 的参考设计
- SC4525F 18V、3A、350kHz 降压型开关稳压器的典型应用
- CY8CKIT-026、CAN 和 LIN 屏蔽套件旨在演示 CAN 和 LIN 总线通信
- DI-116 - 28 W 多输出电源,空载功耗低于 50 mW
- FC-135_MSP430,MSP430和F5xx系列SOC应用处理器的振荡电路和晶体单元选型指南
- FSUSB242GEVB:FSUSB242 评估板
- LT6656BCDC-2.5、2.5V 低功率精密高压电源监视器的典型应用
- AM3G-0515DZ ±15V 3 瓦 DC 至 DC 转换器的典型应用