闹钟程序设计
现在程序是最开始完成源程序的只是简单封装了一下。不是一个更加简化的版本:简化后是 255行代码
要看具体效果
--》视频效果链接 https://www.bilibili.com/video/bv1HX4y137H8
按钮功能说明:
k1 : 按钮可以在主界面 长按3秒
进入菜单 也可以退出菜单 ,一层一层的退出 菜单
k2: 按钮可以切换 子菜单的选择 有 三个选择 (1,2,3) 轻点
在三个菜单之间切换 ,长按3秒
可以进入到对应的 (1,2,3)菜单 。 子菜单说明:
- 每个子菜单的功能:
1
: 设置单片机系统的开始的时间2
: 设置第一个闹钟的时间3
: 设置第二个闹钟的时间
k3 : 设置单片机系统开始的时间和 两个闹钟的时间 。 (只有四个数码管最高设置9分钟)轻点
当前数码管位的时间加一 长按3秒
设置下一位数码管的时间
k4 : 取消闹钟到时后的蜂鸣器
#include <reg52.h>
#include "SmgPackaging.h"
/****************×Ӳ˵¥ÓëÖ÷²Ëµ¥£¨ËùÐ裩********************/
unsigned int Schema = 0;
int pick = 1,value = 0;
int System = 0, BreakSystem = 0; // ϵͳʱ¼äÉèÖñêʶ·û
unsigned int BreakTimerOut = 0, TimerOut = 0, ButtonTimer = 0, ButtonTimer1 = 0, ButtonTimers = 0,ButtonTimer3 = 0;
unsigned int Clock = 0, Clocks = 0; // ÄÖÖÓ¶¨Òå
/****************ģʽÓëÄÖÖÓ£¨ËùÐ裩**********************/
unsigned int i=0,j=0,k=0,l=0, i1=0,j1=0,k1=0,l1=0, i2=0,j2=0,k2=0,l2=0, i3=0,j3=0,k3=0,l3=0;
void main()
{
int value_1 = 1;
TMOD = 0X01;
EA = 1;
TH0 = 0X4C;
TL0 = 0X00;
ET0 = 1;
TH1 = 0X4C;
TL1 = 0X00;
ET1 = 1;
while(1)
{
TR0 = 1;
// ÉÁ˸ʱ¼äµÄ·¶Î§ÉèÖÃ
if(BreakTimerOut > 10){
BreakTimerOut = 0;
}
// ÄÖÖÓʱ¼ä
if(Schema == 0 && i == l1 && j == k1 && k == j1 && l == i1 && System == 1 && BreakSystem == 0) {
Clock = 1;
}
if(Schema == 0 && i == l2 && j == k2 && k == j2 && l == i2 && System == 1 && BreakSystem == 0) {
Clock = 2;
}
if(Clock == 1) {
// F1 = 0;
P1 = 0x00;
Int_DelayTimer(3);
F1 = 1;
}
if(Clock == 2) {
// F1 = 0;
P1 = 0x00;
Int_DelayTimer(3);
F1 = 1;
}
/****************Ê®ÃëÈ¡Ïû ************************/
if(Clock == 1 || Clock == 2) {
ButtonTimer1++;
}
if(ButtonTimer1 > 1350){
Clock = 0;
P1 = 0xff;
ButtonTimer1 = 0;
}
if(K4 == 0 ) {
if(Clock == 1) {
F1 = 1;
Clock = 0;
}
if(Clock == 2) {
F1 = 1;
Clock = 0;
}
}
// if(System == 1) {
// P1 = 0xef;
// }
/************** °´Å¥ 1 ½øÈë»òÍ˳ö ²Ëµ¥Ñ¡Ôñ****************/
if(K1 == 0) {
ButtonTimer++;
Int_DelayTimer(3);
}
if(ButtonTimer > 300 && Schema == 0) {
Schema = 1;
ButtonTimer = 0;
}else if(ButtonTimer >= 600 && Schema == 1) {
Schema = 0;
value = BreakSystem = 1; // ±êʶÒѾ½øÈëÉèÖÃϵͳʱ¼äģʽ Schema £º 4
ButtonTimer = 0;
}else if(ButtonTimer >= 600 && Schema == 2) {
value = Schema = 1;
ButtonTimer = 0;
}else if(ButtonTimer >= 600 && Schema == 3) {
value = Schema = 1;
ButtonTimer = 0;
}else if(ButtonTimer >= 600 && Schema == 4) {
value = Schema = 1;
ButtonTimer = 0;
}else if(K1 == 1 && ButtonTimer < 299) {ButtonTimer = 0;}
if(value == 1) {value_1 = 1; value = 0;}
/************** °´Å¥ 2 Ñ¡Èëģʽ**************/
if(K2 == 0) {
ButtonTimers++;
Int_DelayTimer(3);
}
if(K2 == 1 && ButtonTimers > 1 && ButtonTimers < 500) {
pick += 1;
if(pick >= 4) pick = 1;
ButtonTimers = 0;
}
if(ButtonTimers > 700 && pick == 1) {
System = 1;
Schema = 4;
ButtonTimers = 0;
}else if(ButtonTimers > 700 && pick == 2) {
Schema = 2;
ButtonTimers = 0;
}else if(ButtonTimers > 700 && pick == 3) {
Schema = 3;
ButtonTimers = 0;
}
/************** °´Å¥ 3 µ÷½Úʱ¼ä**************/
if(K3 == 0) {
ButtonTimer3++;
Int_DelayTimer(3);
}
if(ButtonTimer3 > 300) {
value_1 += 1;
if(value_1 >= 5) value_1 = 1;
ButtonTimer3 = 0;
}
// ģʽ¶þ µÚÒ»¸öÄÖÖÓ
// ·ÖÖÓSmg
if(value_1 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 2) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
i1 += 1;
if(i1 >= 10) i1 = 0;
ButtonTimer3 = 0;
}
}
// ʮλÃëSmg
if(value_1 == 2 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 2) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200 ) {
j1 += 1;
if(j1 >= 6) j1 = 0;
ButtonTimer3 = 0;
}
}
// ¸öλÃë Smg
if(value_1 == 3 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 2) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
k1 += 1;
if(k1 >= 10) k1 = 0;
ButtonTimer3 = 0;
}
}
// °Ù·ÖÃë Smg
if(value_1 == 4 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 2) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
l1 += 1;
if(l1 >= 10) l1 = 0;
ButtonTimer3 = 0;
}
}
// ģʽ¶þ ÄÖÖÓ
if(value_1 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 3) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
i2 += 1;
if(i2 >= 10) i2 = 0;
ButtonTimer3 = 0;
}
}
// ʮλÃëSmg
if(value_1 == 2 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 3) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200 ) {
j2 += 1;
if(j2 >= 6) j2 = 0;
ButtonTimer3 = 0;
}
}
// ¸öλÃë Smg
if(value_1 == 3 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 3) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
k2 += 1;
if(k2 >= 10) k2 = 0;
ButtonTimer3 = 0;
}
}
// °Ù·ÖÃë Smg
if(value_1 == 4 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 3) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
l2 += 1;
if(l2 >= 10) l2 = 0;
ButtonTimer3 = 0;
}
}
// ģʽ Ò» ÉèÖÃϵͳʱ¼ä
if(value_1 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 4) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
i3 += 1;
if(i3 >= 10) i3 = 0;
ButtonTimer3 = 0;
}
}
// ʮλÃëSmg
if(value_1 == 2 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 4) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200 ) {
j3 += 1;
if(j3 >= 6) j3 = 0;
ButtonTimer3 = 0;
}
}
// ¸öλÃë Smg
if(value_1 == 3 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 4) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
k3 += 1;
if(k3 >= 10) k3 = 0;
ButtonTimer3 = 0;
}
}
// °Ù·ÖÃë Smg
if(value_1 == 4 && ButtonTimer3 > 1 && ButtonTimer3 < 200 && Schema == 4) {
if(K3 == 1 && ButtonTimer3 > 1 && ButtonTimer3 < 200) {
l3 += 1;
if(l3 >= 10) l3 = 0;
ButtonTimer3 = 0;
}
}
/***************ģʽµÄÖ´ÐÐ*****************/
// Ö÷²Ëµ¥
if(BreakSystem == 1 && Schema == 0) {
i = l3;
j = k3;
k = j3;
l = i3;
Int_DelayTimer(3);
BreakSystem = 0;
}
if(Schema == 0) {
SmgPackaging_Dian(i,j,k,l,1);
}
// Ñ¡ÔñģʽµÄÉÁ˸
if(Schema == 1) {
Led1 = 0;
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(1,pick,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}else {
Led1 = 1;
}
/**********ģʽ¶þ ÄÖÖÓÒ»********/
if(Schema == 2) {
Led2 = 0;
if(value_1 == 1) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(1,i1,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 2) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(2,j1,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 3) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(3,k1,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 4) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(4,l1,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 != 1) {
Pick_One_Four_SmgPackaging(1,i1,1);
}
if(value_1 != 2) {
Pick_One_Four_SmgPackaging(2,j1,1);
}
if(value_1 != 3) {
Pick_One_Four_SmgPackaging(3,k1,1);
}
if(value_1 != 4) {
Pick_One_Four_SmgPackaging(4,l1 ,1);
}
}else {
Led2 = 1;
}
/****************ģʽÈý ÄÖÖÓ¶þ*********************/
if(Schema == 3) {
Led3 = 0;
if(value_1 == 1) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(1,i2,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 2) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(2,j2,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 3) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(3,k2,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 4) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(4,l2,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 != 1) {
Pick_One_Four_SmgPackaging(1,i2,1);
}
if(value_1 != 2) {
Pick_One_Four_SmgPackaging(2,j2,1);
}
if(value_1 != 3) {
Pick_One_Four_SmgPackaging(3,k2,1);
}
if(value_1 != 4) {
Pick_One_Four_SmgPackaging(4,l2,1);
}
}else {
Led3 = 1;
}
/***************ϵͳʱ¼äµÄÉèÖÃ************/
if(Schema == 4) {
Led4 = 0;
if(value_1 == 1) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(1,i3,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 2) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(2,j3,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 3) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(3,k3,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 == 4) {
if(BreakTimerOut <= 5) {
Pick_One_Four_SmgPackaging(4,l3,1);
}
if(BreakTimerOut > 5 && BreakTimerOut <= 10) {
Pick_One_Four_SmgPackaging(0,0,0);
}
}
if(value_1 != 1) {
Pick_One_Four_SmgPackaging(1,i3,1);
}
if(value_1 != 2) {
Pick_One_Four_SmgPackaging(2,j3,1);
}
if(value_1 != 3) {
Pick_One_Four_SmgPackaging(3,k3,1);
}
if(value_1 != 4) {
Pick_One_Four_SmgPackaging(4,l3,1);
}
}else {
Led4 = 1;
}
/*************ʱ¼äÔö¼ÓËã·¨************/
if(TimerOut == 2) {
TimerOut = 0;
i++;
if(i == 10) {
i = 0;
j++;
if(j == 10) {
j = 0;
k++;
if(k == 6) {
k = 0;
l++;
if(k == 10) {
k = 0;
}
}
}
}
}
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x4c;
TL0 = 0x00;
TimerOut++;
BreakTimerOut++;
//add your code here!
}
void Timer1Interrupt(void) interrupt 3
{
TH1 = 0x4c;
TL1 = 0x00;
ButtonTimer++; // °´Å¥1
ButtonTimer1++;
ButtonTimers++; // °´Å¥2
ButtonTimer3++; // °´Å¥ 3
//add your code here!
}
自己封装的 .h 文件 配合上面程序使用
#ifndef _SMGPACKAGING_H_
#define _SMGPACKAGING_H_
//#include "SmgPackaging.c"
#include "reg52.h"
/******ÊýÂë¹Ü******/
sbit Smg1 = P2^4;
sbit Smg2 = P2^5;
sbit Smg3 = P2^6;
sbit Smg4 = P2^7;
/******°´Å¥********/
sbit K1 = P3^4;
sbit K2 = P3^5;
sbit K3 = P3^6;
sbit K4 = P3^7;
/******¶¨ÒåµÆλ******/
sbit Led1 = P1^0;
sbit Led2 = P1^1;
sbit Led3 = P1^2;
sbit Led4 = P1^3;
sbit Led5 = P1^4;
sbit Led6 = P1^5;
sbit Led7 = P1^6;
sbit Led8 = P1^7;
/******·äÃùÆ÷******/
sbit F1 = P2^3;
extern unsigned char code str1[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
extern unsigned char code str2[10] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
extern void SmgPackaging(unsigned int one, unsigned int tow, unsigned int three, unsigned int four , unsigned int Delay_timer);
//extern void SmgPackaging_Dian(int one, int tow, int three, int four , int Delay_timer);
extern void Pick_SmgPackaging(int number, int value , int Delay_timer);
void Int_DelayTimer(unsigned int jk) {
unsigned int j,k;
for(j = jk ; j > 0 ; j--) {
for(k = 112 ; k > 0 ; k--){};
}
}
// µ¥Î»ÏÔʾ ÊýÂë¹Ü
void Pick_One_Four_SmgPackaging(int number, int value , int Delay_timer)
{
if(number == 1) {
P0 = str1[value];
Smg1 = 1;
Smg2 = 0;
Smg3 = 0;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
}else if(number == 2) {
P0 = str1[value];
Smg1 = 0;
Smg2 = 1;
Smg3 = 0;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
}else if(number == 3) {
P0 = str1[value];
Smg1 = 0;
Smg2 = 0;
Smg3 = 1;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
}else if(number == 4) {
P0 = str1[value];
Smg1 = 0;
Smg2 = 0;
Smg3 = 0;
Smg4 = 1;
Int_DelayTimer(Delay_timer);
}else if(number == 0) {
P0 = str1[value];
Smg1 = 0;
Smg2 = 0;
Smg3 = 0;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
}
}
// ²»´øµãµÄÊýÂë¹Ü
/*
void SmgPackaging(unsigned int one, unsigned int tow, unsigned int three, unsigned int four , unsigned int Delay_timer)
{
P0 = str1[one];
Smg1 = 0;
Smg2 = 0;
Smg3 = 0;
Smg4 = 1;
Int_DelayTimer(Delay_timer);
P0 = str1[tow];
Smg1 = 0;
Smg2 = 0;
Smg3 = 1;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
P0 = str1[three];
Smg1 = 0;
Smg2 = 1;
Smg3 = 0;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
P0 = str1[four];
Smg1 = 1;
Smg2 = 0;
Smg3 = 0;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
}*/
// ´øµãµÄµÆ
void SmgPackaging_Dian(int one, int tow, int three, int four , int Delay_timer)
{
P0 = str1[one];
Smg1 = 0;
Smg2 = 0;
Smg3 = 0;
Smg4 = 1;
Int_DelayTimer(Delay_timer);
P0 = str2[tow];
Smg1 = 0;
Smg2 = 0;
Smg3 = 1;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
P0 = str1[three];
Smg1 = 0;
Smg2 = 1;
Smg3 = 0;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
P0 = str2[four];
Smg1 = 1;
Smg2 = 0;
Smg3 = 0;
Smg4 = 0;
Int_DelayTimer(Delay_timer);
}
#endif