本帖最后由 zl2168 于 2017-4-14 21:12 编辑 实例5 4种不同方式键控信号灯 先Proteus仿真一下,确认有效。 ![]() ![]() 以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。 |
/********************************************************************************* * 【程序功能】: 生活中常见一个按键随着按下次数不同对应不同功能 * 【使用说明】: 本程序以QX-MCS51 学习板中的S3键为例,模拟其具有2种功能, 一是点亮一个发光二极管,二是蜂鸣器发声 * 说明:免费开源,不提供源代码分析. **********************************************************************************/ #include<reg52.h> #define uchar unsigned char uchar num; sbit beep=P2^3; sbit led=P1^0; sbit S3=P3^1; void delay(uchar i) { uchar j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void main() { while(1) { if(S3==0) { delay(20); //消抖 if(S3==0) { while(!S3); //等待按键松开 num++; } switch(num) { case 1: led=0; beep=1; break; case 2: beep=0; led=1; num=0; break; } } } } 给你一个例子作为参考 |
试试这个 #include <STC15F104E.H> #define uchar unsigned char #define uint unsigned int sbit LED1=P3^3; //定义LED端口 sbit LED2=P3^4; //定义LED端口 sbit LED3=P3^5; //定义LED端口 sbit key1=P3^0; //按键接口定义 sbit key2=P3^1; //按键接口定义 sbit key3=P3^2; //按键接口定义 //ms延时函数 void Delay_xms(uint x) { uint i,j; for(i=0;i<x;i++) for(j=0;j<122;j++); } //主函数 void main(void) { while(1) { if(key1 == 0) { Delay_xms(10); if(key1 == 0) LED1 = ~LED1; while(!key1); } if(key2 == 0) { Delay_xms(10); if(key2 == 0) LED2 = ~LED2; while(!key2); } if(key3 == 0) { Delay_xms(10); if(key3 == 0) LED3 = ~LED3; while(!key3); } } } |
别无所求 发表于 2017-4-13 14:36 根据您的提示,修改为: #include <STC12C2052AD.H> #define uchar unsigned char #define uint unsigned int sbit key=P3^0; sbit LED=P1^0; //ms延时函数 void Delay_xms(uint x) { uint i,j; for(i=0;i<x;i++) for(j=0;j<50;j++); } //主函数 void main(void) { Delay_xms(10);//等待系统稳定 while(1) { if(key == 0) LED=~LED; } } 去抖还是有问题 |