欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
關(guān)于51單片機(jī)按鈕控制數(shù)碼管計(jì)時(shí)程序 希望大佬幫忙完善一下代碼
[打印本頁(yè)]
作者:
ymml
時(shí)間:
2021-12-3 14:01
標(biāo)題:
關(guān)于51單片機(jī)按鈕控制數(shù)碼管計(jì)時(shí)程序 希望大佬幫忙完善一下代碼
本人已經(jīng)將代碼寫(xiě)了一部分了,能夠?qū)⒌谝粋(gè)按鈕控制第一第二個(gè)數(shù)碼管的計(jì)時(shí),希望有大佬能夠把第二個(gè)按鈕控制第三第四個(gè)數(shù)碼管的計(jì)時(shí)完善一下。
謝謝幫忙了!
代碼如下
#include <STC89C5xRC.H>
#include <intrins.H>
/*分頻*/
#define u8 unsigned char
#define u16 unsigned int
#define cpu_f 12000000
#define machine_cycle 6 //如使用RC/RD單片機(jī)的雙倍速模式則需要改成6
static unsigned char time_count=0;
unsigned char code dm[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char T0RH=0,TORL=0;//初始化高低位值存放變量
bit time_le=1;
//時(shí)鐘周期=晶振/12(6)
void configTime0(u16 ms,u8 *T0H,u8 *TOL);
void smg_watch(unsigned char wx,dx);
void delay_ms(unsigned int count_ms);
unsigned char key(void (*call_key)());
void stop_begin(void);
void stop_begin2(void);
/*1s翻轉(zhuǎn)*/
void main(void)
{
P1=0XFF;
configTime0(50,&T0RH,&TORL); //定時(shí)器初始化,
while(1)
{
smg_watch(0,time_count/10);
smg_watch(1,time_count%10);
key(stop_begin2);
}
}
void stop_begin(void)
{
static unsigned char mode=1;
mode=!mode;
if(mode)
TR0=1;
else
TR0=0;
}
void stop_begin2(void)
{
static unsigned char mode2=1;
mode2=!mode2;
if(mode2)
time_le=1;
else
time_le=0;
}
unsigned char key(void (*call_key)())
{
if(!P30)//做下降沿檢測(cè)
{
delay_ms(20);//延時(shí)消抖
if(!P30)//做下降沿檢測(cè)
{
while(!P30);//做松手檢測(cè)
call_key(); //任務(wù)
return 1;
}
else
return 0;
}
else
return 0;
}
/*******************************************************************************
函數(shù)功能:
* @ 定時(shí)器0初始化
參數(shù)描述:
* @ ms 初始化時(shí)間
返回值描述:
* @ 無(wú)
說(shuō)明:
* @
*******************************************************************************/
void configTime0(u16 ms,u8 *T0H,u8 *TOL)
{
unsigned long temp;//0~4,294,967,296(32字節(jié)一般的時(shí)鐘都用這個(gè)變量算)
/*加載初值*/
temp=cpu_f/machine_cycle;//該宏定義在timer.c(52RC/RD具備6T雙倍速模式,如果為提高程序運(yùn)行效率可更改宏定義)
temp=(temp*ms)/1000; //調(diào)用函數(shù)變量ms要轉(zhuǎn)換成秒
temp=65536-temp;
temp=temp+1;//中斷在準(zhǔn)備中斷時(shí)會(huì)使用一些機(jī)器周期去保存變量,造成響應(yīng)延遲,這里嘗試抵消延遲
/*數(shù)據(jù)結(jié)算*/
*T0H=(u8)(temp>>8);//變量類(lèi)型強(qiáng)制轉(zhuǎn)換 //ff
*TOL=(u8)temp; //f5
/*清空T0控制位,將T0配置成模式1*/
TMOD &=0XF0;
TMOD |=0X01; //置位 0000 0001
/*賦初值*/
TH0=*T0H;//初負(fù)載值(高) 8位寄存器
TL0=*TOL;//(低)
/*初始化T0*/
TF0=0;//清空溢出標(biāo)志位
ET0=1;//使能T0中斷
TR0=1;//啟動(dòng)T0
EA=1;//開(kāi)啟總中斷
}
void smg_watch(unsigned char wx,dx)
{
/*關(guān)閉段選*/
P26=1;
P0=0Xff;/*清空位選*/
P27=1;//打開(kāi)位選 =
P0=_crol_(0XFE,wx);//進(jìn)行位選
/*關(guān)閉位選*/
P27=0;
P0=0X00;/*清空段選*/
P26=1;//打開(kāi)段選
P0= dm[dx];//輸入段選信號(hào)
delay_ms(1);//留顯
}
void delay_ms(unsigned int count_ms)
{
unsigned int count=0;
unsigned char i, j;
for(count=0;count<count_ms;count++)
{
_nop_();
_nop_();
i = 2;
j = 15;
do
{
while (--j);
} while (--i);
}
}
void Interrupt_timer0(void) interrupt 1 //主要模式為計(jì)數(shù)
{
static unsigned char jishu=0;
TH0=T0RH;//初負(fù)載值(高)
TL0=TORL;//(低)
/*計(jì)時(shí)*/
if(time_le)
jishu++;
if((jishu==20))//1s后
{
time_count++;
if(time_count==61)
time_count=0;
jishu=0;
}
}
復(fù)制代碼
keilproject_3.zip
2021-12-3 14:04 上傳
點(diǎn)擊文件名下載附件
25.86 KB, 下載次數(shù): 1
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1