標題:
按鍵按一次蜂鳴器響一次的單片機程序
[打印本頁]
作者:
dabing89
時間:
2018-10-13 17:37
標題:
按鍵按一次蜂鳴器響一次的單片機程序
這個程序的功能是按鍵按下一次,蜂鳴器響一次,按下左邊的按鍵,點亮一排小燈,按鍵支持長按鍵和短按鍵功能,直接移植即可,另外這個程序采用了多個.C文件的方式編程
程序代碼如下:
/********************************************************
*描述:按下第一個按鍵8個小燈點亮,再次按下熄滅,按下第二個按鍵蜂鳴器響一次
QQ:597627977
********************************************************/
#define _MAIN_C
#include "main.h"
/*******************************************************************************
* 文件名:位定義
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
bit flag500ms = 0;//500ms翻轉一次
bit staBuzzer = 0;
/*******************************************************************************
* 文件名:主循環(huán)入口
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void main(void)
{
uint8 i = 0;
Bsp_Power_Init();//LED端口初始化
Timer0Init(); //定時器0初始化函數
Timer1Init(); //1毫秒@11.0592MHz
LED0 = 1;//第一組LED
while(1)
{
KeyDriver();//按鍵掃描
if(flag_key1)
{
flag_key1 = 0;
P2 = ~P2;
}
if(flag_key2)
{
flag_key2 = 0;
KeyBeepState(1);//按鍵響
}
}
}
/*******************************************************************************
* 文件名:void Bsp_Power_Init()
* 描 述: 數碼管上電顯示
* 功 能:編程模塊化
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Bsp_Power_Init(void)
{
EA = 1;
// IE = 0xa8;//允許AD轉換
P0M1 = 0xFC;
P0M0 = 0X03;
P0 = 0X00;
P1M1 = 0xE0;
P1M0 = 0X1F;
P1 = 0X00;
//P2口開漏輸出
P2M1 = 0XFF;
P2M0 = 0XFF;
P2 = 0Xff;
// //P54,P55口為推挽輸出
P5M1 = 0X00;
P5M0 = 0X00;
P5 = 0xFF;
//P37,P36,3.2,P3.3 P3.4口為推挽輸出
P3M1 = 0X00;
P3M0 = 0XFC;
P3 = 0X23;
}
/*******************************************************************************
* 文件名:void Timer0Init(void)
* 描 述: 定時器0配置
* 功 能:編程模塊化
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR &= 0x7F; //定時器時鐘12T模式
TMOD &= 0xf0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = (65535 - 1000) % 256;//設置定時初值
TH0 = (65535 - 1000) / 256;//設置定時初值
ET0 = 1; //打開定時器0中斷使能
TR0 = 1; //定時器0開始計時
EA = 1; //打開總中斷使能
}
/*******************************************************************************
* 文件名:void Timer0Init(void)
* 描 述: 定時器1配置
* 功 能:編程模塊化
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Timer1Init(void) //1毫秒@11.0592MHz
{
AUXR &= 0xBF; //定時器時鐘12T模式
TMOD &= 0x0F; //設置定時器模式
TMOD |= 0x10; //設置定時器模式,寫這個表示不是自動重載模式
TL1 = 0x66; //設置定時初值
TH1 = 0xFC; //設置定時初值
ET1 = 1; //定時器1中斷
TR1 = 1; //定時器1開始計時
EA = 1; //開總中斷使能
}
/*******************************************************************************
* 文件名:void Timer0_inter(void) interrupt 1
* 描 述: 定時器0中斷服務函數
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Timer0_inter(void) interrupt 1
{
//自動重載,初值可以不需要寫
TL0 = (65535 - 1000) % 256; //設置定時初值
TH0 = (65535 - 1000) / 256; //設置定時初值
Beep();
}
/*******************************************************************************
* 文件名:void Timer1_inter(void) interrupt 3
* 描 述: 定時器1中斷服務函數
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Timer1_inter(void) interrupt 3
{
//自動重載,初值可以不需要寫
TL1 = (65535 - 1000) % 256; //設置定時初值
TH1 = (65535 - 1000) / 256; //設置定時初值
KeyScan();//按鍵掃描1ms
}
/*******************************************************************************
* 文件名:void Beep(void)
* 描 述: 蜂鳴器模塊子函數
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Beep(void)
{
static uint8 tmr1ms = 0;
static uint16 tmr1s = 0;
if(staBuzzer)
{
tmr1ms++;
if(tmr1ms >= 1)
{
tmr1ms = 0;
BEEP = ~BEEP;
tmr1s++;
}
if(tmr1s >= 200)//延時時間長短
{
tmr1s = 0;
staBuzzer = 0;
}
}
else
{
BEEP = 1;
}
}
/*******************************************************************************
* 文件名: void KeyBeepState(bit sta)
* 描 述: //1開按鍵音 0關閉按鍵音
* 功 能:模塊化編程
* 作 者:大核桃
* 版本號:1.0.1(2015.03.03)
*******************************************************************************/
void KeyBeepState(uint8 sta)
{
if(sta)
{
staBuzzer = 1;
}
else
{
staBuzzer = 0;
}
}
復制代碼
全部資料51hei下載地址:
015 按鍵的使用.rar
(47.33 KB, 下載次數: 120)
2018-10-13 17:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
快樂眼淚
時間:
2018-10-13 19:34
不知道什么時候能學到樓主的水平
作者:
dabing89
時間:
2018-10-14 14:52
快樂眼淚 發(fā)表于 2018-10-13 19:34
不知道什么時候能學到樓主的水平
我沒啥水平,老菜鳥一枚,有問題可以交流,在壇子上就可以,如果來不及回復你,可以加我,大家一起進步
作者:
潘克民ming
時間:
2020-3-4 16:14
非常棒,感謝!
作者:
褲褲的兜
時間:
2020-4-11 11:34
非常好,值得分享
作者:
SHANWAZI
時間:
2021-2-8 17:52
這個有源蜂鳴器還是無源蜂鳴器?
作者:
CHANXIN
時間:
2021-6-22 22:01
向樓主學習!太厲害了!向樓主學習!太厲害了!向樓主學習!太厲害了!向樓主學習!太厲害了!向樓主學習!太厲害了!
作者:
wyl138
時間:
2022-10-31 19:53
謙虛的樓主令人敬佩.
作者:
1253759011
時間:
2024-1-9 13:51
好清晰的代碼風格
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1