您的位置 首页 应用

51单片机小闹钟

以前用51的时候,在Proteus里边仿真过很多东西,51的一些基本功能都做过实验,复杂点的东西虽然也有,但是都是随性而来,需要什么用什么,

曾经用51的时分,在Proteus里面仿真过许多东西,51的一些基本功用都做过试验,复杂点的东西尽管也有,可是都是随性而来,需求什么用什么,程序显得臃肿难读,功率低下,且没有及时把剖析记录下来

有时刻自己再做一遍闹钟,跟曾经做的感觉不同很大,曾经如同都是COPY,自己改动的很少,并且老觉得程序长,当自己去规划过程时,呈现的问题却不在这个当地,尽管51关于许多人而言,已再了解不过,可是我觉得算法都相同,在很了解的51上验证算法是很有功率的

功用:

1:时钟显现

2:时钟可调

3:可设闹钟

4:闹钟随时可关

思路:

1:时钟用定时器1操控,每隔一秒,秒变量+1,

数码管扫描显现时钟

2:设置2个可调时分按键,按键按下,对应时刻变量+1

3:设置形式键,奇数次按下,改动闹钟时分

偶数次按下,改动时钟时分

不断地查询检测,时钟时分==闹钟时分?,假如等于,则相应闹铃

4:设置关闹铃键,按下时封闭闹铃

在这个当地会呈现一个小问题,闹钟是否敞开需求一向扫描,关闹钟按键也需求一向扫描,

当按键按下,在此时关掉闹钟,可是,在这一分钟之内,闹钟都有敞开的理由,故关了之后,

再次检测闹钟时,闹钟会再次翻开,

改进办法:设置标志量,当关闹钟之后的额外时刻内,不再检测闹钟,额外时刻与闹钟的操控精度有关

程序如下:


#include

#define uchar unsigned char
#define uint unsigned int

sbit beep=P3^1;
sbit led=P3^0;

sbit hour_key=P3^4;//调理小时键
sbit minu_key=P3^5;//调理分钟键

sbit stopsounder_key=P3^3; //关闹钟按键

bit sounder_flag=0;

sbit mode_key=P3^7; //调理时钟仍是闹铃操控按键

uchar mode_number;//形式计数

uchar sec_count;

uint a,b; //形式计数

uchar minu0=1;
uchar hour0,sec0, //闹钟

hour1,minu1,sec1,//时钟

h1,h2,m1,m2,s1,s2,//显现位

k;//状况转化标志

uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void keyscan();
void init();
void delay(uchar z);
void display(uchar,uchar,uchar);
void mode_check();

void init()
{
a=0;
b=0;
k=0;

hour1=0;
minu1=0;
sec1=0;

hour0=0;
minu0=1;
sec0=0;

TMOD=0x11; //定时器0,1作业于方法1;赋初值

TH0=(65536-5000)/256;
TL0=(65536-5000)%6;

TH1=(65536-50000)/256;
TL1=(65536-50000)%6;


EA=1;

EX0=1;

//ET0=0;
ET1=1;

IT0=1; //P3.2引脚下经沿发生外部中止0

//PX0=1;

//TR0=1; //初始,秒表不作业

TR1=1; //时钟一开始作业

}

void delay(uchar z)
{
int x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–);
}

void ex0_int() interrupt 0
{

//效果待增加
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/259721.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部