亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機按鍵控制數碼管秒表視頻+源程序
[打印本頁]
作者:
Zidone
時間:
2019-1-20 23:22
標題:
單片機按鍵控制數碼管秒表視頻+源程序
按鍵控制數碼管秒表
從上到下四個按鍵分別為 啟動/繼續運行按鍵 暫停按鍵 復位清零按鍵 熄屏睡眠按鍵
實際效果見視頻:
http://v.youku.com/v_show/id_XNDAyMjU4ODMyOA==.html?x&sharefrom=android&sharekey=0b9b9d0de363b830ab2c00b3d0679bb69&qq-pf-to=pcqq.c2c
其余內容見附件:
單片機源碼:
/* 包含頭文件 -------------------------------------------------------------*/
#include "STC8.h"
#include "intrins.h"
#include "bsp_key.h"
#include "bsp_led.h"
#include "bsp_smg.h"
/*常量聲明-----------------------------------------------------------------*/
unsigned char KeySta[4]={//按鍵當前狀態
1,1,1,1
};
/*變量聲明 ----------------------------------------------------------------*/
unsigned char sec=0;//秒時間初值
unsigned char flag1s=0;//秒表運行刷新標志
bit RunningFlag=0;//秒表運行標志
bit ResetFlag=1;//秒表復位標志(注:鎖死定時器,避免多走,為啟動做準備)
bit PauseFlag=0;//秒表暫停標志
/*函數聲明 -------------------------------------------------------------- */
void ConfigTimer0(unsigned int ms); //定時器0配置函數聲明
void KeyScan(void); //按鍵掃描函數聲明
void KeyDriver(void); //按鍵驅動函數
void StopwatchAction(void);//Stopwatch啟動函數聲明
void StopwatchReset(void);//Stopwatch復位函數聲明
void StopwatchPause(void);//Stopwatch暫停函數聲明
void main(void)
{
EA=1;//開總中斷
ConfigTimer0(2);//配置T0定時2ms
while(1)
{
KeyDriver();
if(flag1s&&RunningFlag)//運行狀態
{
flag1s=0;
if(!PauseFlag)//如果暫停鍵沒有按下(暫停狀態)
{
sec++;
}
SMGBuff[0]=SMGChar[sec%10];
SMGBuff[1]=SMGChar[sec/10%10];
if(sec==100)//因為我總共就只有兩位數碼管,所以滿100清0
{
sec=0;
}
}
else if(ResetFlag)//復位狀態
{
SMGBuff[0]=SMGChar[sec%10];
SMGBuff[1]=SMGChar[sec/10%10];
}
}
}
/*
函數名稱:Stopwatch啟動函數
功 能:/
*/
void StopwatchAction(void)
{
RunningFlag=1;//運行標志置1
ResetFlag=0;//復位標志置0
PauseFlag=0;//暫停標志置0
}
/*
函數名稱:Stopwatch復位函數
功 能:/
*/
void StopwatchReset(void)
{
ResetFlag=1;//復位標志置1
RunningFlag=0;//運行標志置0
PauseFlag=0;//暫停標志置0
sec=0;//清零計數值
}
/*
函數名稱:Stopwatch暫停函數
功 能:/
*/
void StopwatchPause(void)
{
PauseFlag=1;//暫停標志置0
ResetFlag=0;//復位標志置1
RunningFlag=0;//運行標志置0
}
/*
函數名稱:按鍵驅動程序
功 能:檢測按鍵動作,調度相應動作函數
*/
void KeyDriver(void)
{
unsigned char i;
static unsigned char backup[4]={
1,1,1,1
};
for(i=0;i<4;i++)//循環檢測四個按鍵
{
if(backup[i]!=KeySta[i])//檢測按鍵動作
{
if(backup[i]!=0)//按鍵按下時執行動作
{
if(i==0)
StopwatchAction();
else if(i==1)
StopwatchPause();
else if(i==2)
StopwatchReset();
else if(i==3)
_nop_();
}
backup[i]=KeySta[i];//刷新前一次備份的值
}
}
}
/*
函數名稱:按鍵掃描程序
功 能:按鍵掃描函數,須在定時器中斷中調用
*/
void KeyScan(void)
{
unsigned char i;
static unsigned char keybuf[4]={
0xFF,0xFF,0xFF,0xFF
};
//按鍵值移入緩沖區
keybuf[0]=(keybuf[0]<<1)|KEY2;
keybuf[1]=(keybuf[1]<<1)|KEY3;
keybuf[2]=(keybuf[2]<<1)|KEY4;
keybuf[3]=(keybuf[3]<<1)|KEY5;
for(i=0;i<4;i++)
{
if(keybuf[i]==0x00)
{//連續8次掃描值為0,即16ms內都是按下狀態時,可認為按鍵已穩定的按下
KeySta[i]=0;
}
else if(keybuf[i]==0xFF)
{//連續8次掃描值為1,即16ms內都是彈起狀態,可認為按鍵已穩定的彈起
KeySta[i]=1;
}
}
}
/*
函數名稱:定時器0初始化程序
功 能:定時器0方式1 16位自動重載 12分頻
*/
void ConfigTimer0(unsigned int ms) //@24.000MHz
{
unsigned char T0RH=0;
unsigned char T0RL=0;
unsigned long tmp;
tmp=24000000/12;//定時器計數頻率
tmp=(tmp*ms)/1000;//計算所需的計數值
tmp=65536-tmp;//計算定時器重載值
T0RH=(unsigned char)(tmp>>8);//定時器重載值拆分為高低字節
T0RL=(unsigned char)tmp;
TMOD &=0xF0;//清零T0的控制位
TMOD |=0x00;//配置T0為模式0
TH0=T0RH;//加載T0重載值
TL0=T0RL;
ET0=1;//使能T0中斷
TR0=1;//啟動T0
}
/*
函數名稱:定時器0中斷服務程序
功 能:2ms進入中斷一次
*/
void TM0_Rountine(void) interrupt 1
{
static unsigned char i=0;//動態掃描的索引
static unsigned int cnt=0;//記錄T0中斷次數
KeyScan();
if(ResetFlag)//如果暫停鍵按下,計數清零
cnt=0;
else if(!PauseFlag)//如果暫停鍵沒有按下
cnt++;
if(cnt>=500)
{
cnt=0;
flag1s=1;
}
switch(i)
{
case 0:SMG1_EN=1;SMG2_EN=0;i++;SMG=SMGBuff[0];break;
case 1:SMG1_EN=0;SMG2_EN=1;i=0;SMG=SMGBuff[1];break;
default:break;
}
}
復制代碼
全部資料51hei下載地址:
Template.zip
(66.23 KB, 下載次數: 24)
2019-1-20 23:21 上傳
點擊文件名下載附件
按鍵控制數碼管秒表
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1