標題:
第八屆藍橋杯程序,實現數碼管1S的閃爍思路,以及全部單片機代碼
[打印本頁]
作者:
小葉芽
時間:
2022-4-9 20:25
標題:
第八屆藍橋杯程序,實現數碼管1S的閃爍思路,以及全部單片機代碼
#include "sysinit.h"
#include "onewire.h" //單總線函數庫
sbit key7=P3^0;
sbit key6=P3^1;
sbit key5=P3^2;
sbit key4=P3^3;
sbit led=P0^0;
extern void HC138_chose(u8 channel);
extern void display_a(struct time vaul,u8 one,u8 two,u8 three);
extern void display_b();
void naozhong_task();
void key5_task();
void key4_task();
u8 shanshuo_flag[3]={1,1,1};
u8 naozhong_start=0;//鬧鐘開始響
void sys_init()//關閉蜂鳴器繼電器,LED
{
HC138_chose(5);
P0=0XA0;
HC138_chose(4);
P0=0XFF;
HC138_chose(0);
}
void led_on()
{
HC138_chose(4);
P0=0XFE;
HC138_chose(0);
}
void led_off()
{
HC138_chose(4);
P0=0XFF;
HC138_chose(0);
}
void led_shan()
{
HC138_chose(4);
P0|=0xFE;
led=~led;
//HC138_chose(0);
}
void led_offf()
{
HC138_chose(4);
P0|=0xFE;
led=1;
HC138_chose(0);
}
void led_onn()
{
HC138_chose(4);
P0|=0xFE;
led=0;
HC138_chose(0);
}
void Timer0Init(void) //50毫秒@11.0592MHz
{
AUXR &= 0x7F; //定時器時鐘12T模式
TMOD &= 0xF0; //設置定時器模式
TL0 = 0x00; //設置定時初值
TH0 = 0x4C; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
EA=1;
ET0=1;
}
u8 key_scan(u8 mode)//哪個獨立按鍵按下就顯示哪個值
{
static u8 key=1;
if(mode)key=1;
if((key4==0||key5==0||key6==0||key7==0)&&key==1)
{
Delay10ms();
if(naozhong_start==1)
{
naozhong_start=0;//任意按鍵關閉鬧鐘
led_offf();
return 0;//按鍵退出鬧鐘閃爍模式
}
key=0;
if(key4==0)return 4;
else if(key5==0)return 5;
else if(key6==0)return 6;
else if(key7==0)return 7;
}
else if(key4==1&&key5==1&&key6==1&&key7==1)
{
key=1;
}
return 0;
}
struct time vaul={23,59,50};
struct time naozhong={0,0,0};
bit one=1,two=1,three=1;//到哪一位
u8 set_flag=0;//
bit naozhong_set=0;//鬧鐘和正常顯示切換
bit wendu_flag;
bit deng;
unsigned char wendu_value=0;
u8 wendu_ms=0;
void main()
{
u8 key_vaul=0;
sys_init();
Timer0Init();
wendu_value=rd_temperature();//不加這個會產生一個85;
while(1)
{
// display_b();
if(naozhong_set)
{
display_a(naozhong,one,two,three);
}else display_a(vaul,one,two,three);
if(deng&&naozhong_start)
{
led_onn();
}else if(deng==0&&naozhong_start)
{
led_offf();
}
naozhong_task();
key_vaul=key_scan(0);
if(key_vaul==7)//時間模式
{
set_flag++;//移動表示哪一位在閃爍
set_flag&=0x03;//限制在3以內
}else if(key_vaul==6)
{
set_flag=0;
naozhong_set=!naozhong_set;//選擇當前模式
}else if(key_vaul==5)//時間加
{
key5_task();
}else if(key_vaul==4)
{
key4_task();
if(set_flag==0)//溫度顯示的開關
{
while(!key4)
{
//EA=0;
// Delay1ms();
display_b();
if(wendu_ms>=20)
{
wendu_value=read_data();
wendu_ms=0;
}
}
// EA=1;
}
}
}
}
void time_0() interrupt 1
{
static u8 count=0,i=0;
count++;
wendu_ms++;
if(naozhong_start)
{
i++;
if(i%4==0)
{
deng=!deng;
//led_shan();
}
if(i>100)
{
i=0;
naozhong_start=0;
led_offf();
}
}
if(count>=20)
{
count=0;
switch(set_flag)
{
case 1:one=!one;two=1;three=1;break;
case 2:two=!two;one=1;three=1;break;
case 3:three=!three;one=1;two=1;break;
default:one=1;two=1;three=1;break;
}
vaul.sec++;
if(vaul.sec>=60)
{
vaul.sec=0;
vaul.minute++;
if(vaul.minute>=60)
{
vaul.minute=0;
vaul.hour++;
if(vaul.hour>=24)vaul.hour=0;
}
}
}
}
void key5_task()
{
if(naozhong_set)//時鐘位
{
if(set_flag==1)
{
naozhong.hour++;
if(naozhong.hour>=24)naozhong.hour=0;
}else if(set_flag==2)
{
naozhong.minute++;
if(naozhong.minute>=60)naozhong.minute=0;
}else if(set_flag==3)
{
naozhong.sec++;
if(naozhong.sec>=60)naozhong.sec=0;
}
}else //鬧鐘位
{
if(set_flag==1)
{
vaul.hour++;
if(vaul.hour>=24)vaul.hour=0;
}else if(set_flag==2)
{
vaul.minute++;
if(vaul.minute>=60)vaul.minute=0;
}else if(set_flag==3)
{
vaul.sec++;
if(vaul.sec>=60)vaul.sec=0;
}
}
}
void key4_task()
{
if(naozhong_set)//時鐘位
{
if(set_flag==1)
{
naozhong.hour--;
if(naozhong.hour<0)naozhong.hour=23;
}else if(set_flag==2)
{
naozhong.minute--;
if(naozhong.minute<0)naozhong.minute=59;
}else if(set_flag==3)
{
naozhong.sec--;
if(naozhong.sec<0)naozhong.sec=59;
}
}else //鬧鐘位
{
if(set_flag==1)
{
vaul.hour--;
if(vaul.hour<0)vaul.hour=23;
}else if(set_flag==2)
{
vaul.minute--;
if(vaul.minute<0)vaul.minute=59;
}else if(set_flag==3)
{
vaul.sec--;
if(vaul.sec<0)vaul.sec=59;
}
}
}
void naozhong_task()
{
if(naozhong.sec==vaul.sec&&naozhong.minute==vaul.minute&&naozhong.hour==vaul.hour)
{
naozhong_start=1;
}
}
復制代碼
Keil代碼下載:
新建文件夾.zip
(70.87 KB, 下載次數: 11)
2022-4-9 20:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1