![]() |
發布時間: 2017-4-13 13:26
正文摘要:#include <STC15F104E.H> #define uchar unsigned char #define uint unsigned int #define LED1=P3^3 //定義LED端口 #define LED2=P3^4 //定義LED端口 #define LED3=P3^5 //定義LED端口 sbi ... |
本帖最后由 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; } } 去抖還是有問題 |