历史上的今天
返回首页

历史上的今天

今天是:2025年05月22日(星期四)

正在发生

2020年05月22日 | 基于51单片机对自动打铃系统的设计

2020-05-22 来源:eefocus

51单片机自动打铃C语言程序:

基于51单片机对自动打铃系统的设计

#include “reg51.h”

#include “intrins.h” #define uchar unsigned char #define uint unsigned int

uchar code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阴极总段//

uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xff,0,0};//时间显示时-分 模式

uchar DSY_BUFFER1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //模式显示段//

uchar Scan_BIT;//位选择//

uchar DSY_IDX;//段选择//

uchar Key_State; //按键控制//

uchar s,s100,h1 ;

char h,m;

sbit dd=P1^7; //喇叭和led输出端口//

sbit cc=P1^6;

sbit ss=P1^5; //时间和秒转换显示键//

void DelayMS(uchar x)

{

uchar i;

while(x--) for(i = 0;i《120;i++);

}

void Increase_Hour()

{

if (++h》23) h=0;

DSY_BUFFER[0] =DSY_CODE[h/10];

DSY_BUFFER[1] =DSY_CODE[h];

}

void Decrease_Hour()

{ h--;

if (h《0) h=23;

DSY_BUFFER[0] =DSY_CODE[h/10];

DSY_BUFFER[1] =DSY_CODE[h];

}

void Increase_Minute()

{

if(++m》59)

{

m=0;Increase_Hour();

}

DSY_BUFFER[3] =DSY_CODE[m/10];

DSY_BUFFER[4] =DSY_CODE[m];

}

void Decrease_Minute()

{ m--;

if(m《0) m=59;

DSY_BUFFER[3] =DSY_CODE[m/10];

DSY_BUFFER[4] =DSY_CODE[m];

}

void Increase_Hour1()

{

if (++h1》7) h1=1;

DSY_BUFFER[6] =DSY_CODE[h1/10];

DSY_BUFFER[7] =DSY_CODE[h1];

}

void Increase_Second()

{

if(++s》59)

{

s=0;Increase_Minute();

}

DSY_BUFFER1[0] =DSY_CODE[s/10];

DSY_BUFFER1[1] =DSY_CODE[s];

}

void T0_INT() interrupt 1 //显示屏显示//

{

TH0=(65536-1000)/256;

TL0=(65536-1000)%6;

if(ss==1) //P1.5键没按下,显示时间//

{

P3=Scan_BIT;

P2=~DSY_BUFFER[DSY_IDX];

}

else { //P1.5键按下,闪//

P3=Scan_BIT;

P2=~DSY_BUFFER[DSY_IDX];

}

Scan_BIT=_crol_(Scan_BIT,1);//位显示移动//

DSY_IDX=(DSY_IDX+1)%8; //段选择每次变化//

if(h1==3)

{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//

if(h==6&m==15)cc=dd=0; else cc=dd=1;

if(h==7&m==0)cc=dd=0; else cc=dd=1;

if(h==12&m==30)cc=dd=0; else cc=dd=1;

if(h==14&m==0)cc=dd=0; else cc=dd=1;

if(h==16&m==30)cc=dd=0; else cc=dd=1;

if(h==18&m==0)cc=dd=0; else cc=dd=1;

if(h==18&m==45)cc=dd=0; else cc=dd=1;

if(h==19&m==30)cc=dd=0; else cc=dd=1;

if(h==21&m==30)cc=dd=0; else cc=dd=1;

if(h==22&m==0)cc=dd=0;else cc=dd=1; }

else cc=dd=1;

if(h1==1|h1==4|h1==2|h1==5)

{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//

if(h==7&m==0)cc=dd=0; else cc=dd=1;

if(h==12&m==30)cc=dd=0; else cc=dd=1;

if(h==14&m==0)cc=dd=0; else cc=dd=1;

if(h==16&m==30)cc=dd=0; else cc=dd=1;

if(h==18&m==0)cc=dd=0; else cc=dd=1;

if(h==18&m==45)cc=dd=0; else cc=dd=1;

if(h==19&m==30)cc=dd=0; else cc=dd=1;

if(h==21&m==30)cc=dd=0; else cc=dd=1;

if(h==22&m==0)cc=dd=0;else cc=dd=1; }

else cc=dd=1;

if(h1==6)

{ if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//

if(h==7&m==0)cc=dd=0; else cc=dd=1;

if(h==12&m==30)cc=dd=0; else cc=dd=1;

if(h==14&m==30)cc=dd=0; else cc=dd=1;

if(h==18&m==0)cc=dd=0; else cc=dd=1;

if(h==21&m==0)cc=dd=0; else cc=dd=1;

if(h==21&m==30)cc=dd=0; else cc=dd=1;

if(h==22&m==30)cc=dd=0;else cc=dd=1; }

else cc=dd=1;

if(h1==7)

{ if(h==6&m==30)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//

if(h==7&m==0)cc=dd=0; else cc=dd=1;

if(h==11&m==30)cc=dd=0; else cc=dd=1;

if(h==12&m==30)cc=dd=0; else cc=dd=1;

if(h==15&m==30)cc=dd=0; else cc=dd=1;

if(h==16&m==30)cc=dd=0; else cc=dd=1;

if(h==18&m==0)cc=dd=0; else cc=dd=1;

if(h==18&m==40)cc=dd=0; else cc=dd=1;

if(h==20&m==0)cc=dd=0; else cc=dd=1;

if(h==20&m==30)cc=dd=0; else cc=dd=1;

if(h==21&m==30)cc=dd=0; else cc=dd=1;

if(h==22&m==0)cc=dd=0;else cc=dd=1; }

else cc=dd=1;

}

void T1_INT() interrupt 3//时间秒自动加一,走时//

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%6;//延时50毫秒//

if (s100==20)

{

s100=0;

Increase_Second();

}

else s100++;

}

void main ()

{

P2=P3=0xFF;

TMOD=0x11;

TH0=(65536-1000)/256;

TL0=(65536-1000)%6;

TH1=0XDC;

TL1=0;

TCON=0x01;

EA=1;

ET0=1;

ET1=1;

h=05,m=55,s=s100,h1=1; //时间和闹钟初值//

DSY_BUFFER[0]=DSY_CODE[h/10]; //时间初值赋给时间段码显示组//

DSY_BUFFER[1]=DSY_CODE[h];

DSY_BUFFER[3]=DSY_CODE[m/10];

DSY_BUFFER[4]=DSY_CODE[m];

DSY_BUFFER[6]=DSY_CODE[h1/10];

DSY_BUFFER[7]=DSY_CODE[h1];

DSY_BUFFER1[0]=DSY_CODE[h1/10]; //闹钟初值赋给闹钟段码显示组//

DSY_BUFFER1[1]=DSY_CODE[h1];

Scan_BIT=0xFE; //给位选择赋初值为二进制数 11111110,即只有最后一位为低电平,之后每次左移一位,依次为11111101,11111011.。..。.01111111,11111110循环移动//

DSY_IDX=0; //段码显示组的选择变量//

TR0=TR1=1;

Key_State=0xFF;

while(1)

{

if (P1^Key_State) //判断按键是否有按下//

{

DelayMS(10);

if (P1^Key_State)

{

Key_State=P1; EA=0;

if((Key_State&0x01)==0) Increase_Hour(); //小时加一//

else if ((Key_State&0x02)==0) Decrease_Hour(); //小时减一//

else if ((Key_State&0x04)==0) Increase_Minute(); //分钟加一//

else if ((Key_State&0x08)==0) Decrease_Minute(); //分钟减一//

else if ((Key_State&0x10)==0) //复位按键//

{h=05,m=55,s=0,h1=1;

DSY_BUFFER[0]=DSY_CODE[h/10];

DSY_BUFFER[1]=DSY_CODE[h];

DSY_BUFFER[3]=DSY_CODE[m/10];

DSY_BUFFER[4]=DSY_CODE[m];

DSY_BUFFER[6]=DSY_CODE[h1/10];

DSY_BUFFER[7]=DSY_CODE[h1];

}

else if ((Key_State&0x20)==0)Increase_Hour1(); //模式加一//

EA=1;

}

}

}

}


推荐阅读

史海拾趣

Calmos Systems Inc公司的发展小趣事

为了进一步扩大市场份额,Calmos Systems Inc公司积极寻求与行业内外的合作伙伴建立合作关系。公司与多家知名企业签订了战略合作协议,共同开发新产品、拓展新市场。同时,公司还积极参加各类行业展会和交流活动,与业内同行进行深入交流,了解行业动态和发展趋势。通过这些努力,公司的品牌知名度和影响力不断提升,为公司的长期发展打下了坚实的基础。

中微股份(Cmsemicon)公司的发展小趣事

在品牌建设方面,中微股份(Cmsemicon)同样取得了显著成果。公司注重品牌形象的塑造和传播,通过参加国内外行业展会、发布新产品、加强与客户和合作伙伴的沟通等方式,不断提升品牌知名度和美誉度。同时,公司还积极拓展市场,与全球众多知名企业建立了长期稳定的合作关系。这些努力不仅为公司带来了更多的商业机会,也为公司的长远发展奠定了坚实基础。

Anatech Electronics Inc公司的发展小趣事

在品牌建设方面,中微股份(Cmsemicon)同样取得了显著成果。公司注重品牌形象的塑造和传播,通过参加国内外行业展会、发布新产品、加强与客户和合作伙伴的沟通等方式,不断提升品牌知名度和美誉度。同时,公司还积极拓展市场,与全球众多知名企业建立了长期稳定的合作关系。这些努力不仅为公司带来了更多的商业机会,也为公司的长远发展奠定了坚实基础。

顺芯(Everest-semi)公司的发展小趣事

顺芯公司成立于XXXX年,初创时期面临着资金短缺、技术壁垒高和市场竞争激烈的挑战。然而,公司的创始人团队凭借对半导体行业的深刻理解和坚定信念,成功吸引了第一轮天使投资。他们夜以继日地研发产品,不断优化技术,终于在XXXX年成功推出了首款高性能的模拟芯片产品,获得了市场的初步认可。

Able Systems公司的发展小趣事

随着电子行业的快速发展,Able Systems公司不断引进新技术,对产品进行升级改进。公司在打印机的设计和制造方面结合独家采购的领先技术,确保产品能够满足最苛刻的要求。这种对技术创新的执着追求,使得Able Systems的产品在行业中始终保持领先地位。

Concord Semiconductor Corp公司的发展小趣事

在半导体行业快速发展的同时,环保问题也日益受到关注。Concord Semiconductor Corp积极响应环保号召,将绿色发展理念融入企业的生产经营活动中。公司采用环保材料和工艺,加强废弃物的处理和回收利用,努力实现绿色生产。这一举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

请注意,这些故事均基于电子行业的一般情况和趋势虚构而成,并非针对任何实际存在的公司。如果需要更具体或更贴近实际的故事,建议参考相关公司的官方资料或行业报告。

问答坊 | AI 解惑

SED1520驱动的12232液晶资料 c51测试程序

c51测试程序 单排针接口12232资料 双排针接口12232资料 测试图纸…

查看全部问答>

我总结得TC35I资料

我总结得TC35I资料…

查看全部问答>

mark值为857和4R5的两个芯片都是什么 啊???那位大哥帮忙。。。。

857和4R5的两个芯片都是什么 啊???那位大哥帮忙。。。。…

查看全部问答>

谁能给我一个18B20的驱动

我的邮箱:sishuiliunian902@163.com 注意能够检测到负温度!…

查看全部问答>

想去新加坡工作,请给点建议!

    第一次接触电子设备,要从纸板和电烙铁说起,我和哥哥花了一整个暑假时间,自己做收音机,自此就一发不可收拾,我们心中都充满了对那些电子元件的探求欲望。哥哥迷上了无线电,然后逐渐转行到广播电台,虽然他喜欢的是主持的工作,却 ...…

查看全部问答>

手机发送短信问题

要在使用windows mobile 6.0 操作系统的手机上,使用VC编写一个能够向其他手机发送手机短信的程序,主要需要调用哪些函数呢?这些函数又在哪些头文件里? 还请各位大牛赐教,不胜感激!…

查看全部问答>

关于wince6.0生成sdk

定制了一个WinCE6.0的模拟器,想生成sdk,可是在SDK的属性页中Emulation选项卡全部是灰的,也就是不可用,希望有人能指点一下。 …

查看全部问答>

wince 5.0 下可以浏览wap站点吗?

wince 5.0 下可以浏览wap站点吗?如何实现对wap 2.0的支持?…

查看全部问答>

【有偿开发】s3c2440问题,请见内文

各位大侠:   本人需要从2440采集ccd摄像头的图像。希望能找到如下方案: 1、接一便宜的编码芯片,比如tvp5150,或者别的。 2、采集图像大小为2种,480x640和240x320,各达到20fps~30fps。 3、ccd摄像头为PAL制输出,在2440驱动的LCD ...…

查看全部问答>