标题:
51单片机闹钟添加取消响铃按键
[打印本页]
作者:
automation007
时间:
2021-1-24 11:36
标题:
51单片机闹钟添加取消响铃按键
本帖最后由 automation007 于 2021-1-28 20:17 编辑
51闹钟添加取消响铃按键,有时候响铃很烦人,所以添加了按键以跳过当前响铃,下一次再响...还添加了工作与休息按键,按工作键时就进入工作计时,按休息键时,就进入休息计时。默认工作时长为30分钟,休息时长为10分钟。继昨天开发了三个按键,今天又加入了一个切换铃声的按键...反正用的是最笨的办法...谁有空有兴趣再研究吧!可以用串口来控制的我偏用8个IO口来控制....太笨了
单片机源程序如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit K1=P3^7;//跳过当前响铃
sbit K2=P3^6;//开始休息
sbit K3=P3^5;//开始工作
uint working_hours;//
uint rest_time;//
//uint Ring_duration;//
uchar code digital_table[]={//-
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar code digital[]={//
0x1f,0x2f,0x4f,0x8f
};
uint num;//
void init();//
void display_digital();//
void delay_ms(uint x);
void main(){
/***可修改工作时间与休息时间,其它不用动***/
working_hours=29;//工作时长 29
rest_time=9;//休息时长 9
init();
display_digital();
}
void display_digital(){
uchar temp,m[4],up=1,lower=0,min_temp=0,max_temp=1;
uchar AlarmClock_switch=1;
uint tim;//
while(1){
if(K1==0||K2==0||K3==0){
delay_ms(50);
if(K1==0||K2==0||K3==0){
if(K1==0){//
delay_ms(50);//
if(K1==0){//
AlarmClock_switch=0;//
}
}
if(K2==0){//10()
delay_ms(50);//
if(K2==0){//
num=0;//
tim=0;//
lower=1;//=1
up=0;//
AlarmClock_switch=0;
min_temp=2;//
max_temp=3;//
}
}
if(K3==0){//)
delay_ms(50);
if(K3==0){
num=0;//
tim=0;//
up=1;//
lower=0;//
AlarmClock_switch=0;
min_temp=0;//
max_temp=1;//
}
}
}
}
if(tim!=0&&AlarmClock_switch==0){// 1200
AlarmClock_switch=1;//
}
if(num>=1200){//1 1200
num=0;//
tim++;//++
if(up&&tim>working_hours){//
tim=0;
lower=1;//=1
up=0;//
min_temp=2;//
max_temp=3;//
}
if(lower&&tim>rest_time){//
tim=0;//
up=1;//
lower=0;//
min_temp=0;//
max_temp=1;//
}
}
if(tim==0&&up==1&&num<340&&AlarmClock_switch==1){//<17 tim1
P1=0xfd;//
}else if(tim==0&&lower==1&&num<400&&AlarmClock_switch==1){//<26s
P1=0xf7;//0xfb
}else
P1=0xff;//
if(tim>9){//>9
temp++;//++
if(temp>max_temp)//>
temp=min_temp;//
m[min_temp]=tim/10;
m[max_temp]=tim%10;
}else{
temp=min_temp;
m[min_temp]=tim;//
}
P0=0x00;//
P2=digital[temp];//
P0=digital_table[m[temp]];//
}
}
void init(){
num=0;
TMOD=1;//T016
TH0=(65535-50000)/255;//50//
TL0=(65535-50000)%255;//
EA=1;//
ET0=1;//0
TR0=1;//0
K1=1;
K2=1;
}
void timer0() interrupt 1 /*using 0*/{//
TH0=(65535-50000)/255;//50
TL0=(65535-50000)%255;//50
num++;//++
}
void delay_ms(uint x){
uint t,m;
for(t=x;t>0;t--){
for(m=120;m>0;m--);
}
}
复制代码
所有资料51hei提供下载:
51闹钟添加取消响铃按键2.rar
(1.7 MB, 下载次数: 10)
2021-1-25 20:49 上传
点击文件名下载附件
下载积分: 黑币 -5
alarm_clock2.1.rar
2021-1-28 20:17 上传
点击文件名下载附件
下载积分: 黑币 -5
2.46 KB, 下载次数: 6, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1