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

发布者:鑫森淼焱最新更新时间:2017-09-02 来源: elecfans关键字:51单片机  自动打铃  C语言程序 手机看文章 扫描二维码
随时随地手机看文章

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

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

#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;

  }

               }

    }

}


关键字:51单片机  自动打铃  C语言程序 引用地址:51单片机自动打铃C语言程序

上一篇:AT89C51单片机直流电机PWM调速程序
下一篇:Ds3231+12864液晶显示AT89C51带温度功能的时钟程序

推荐阅读最新更新时间:2024-03-16 15:35

51单片机程序烧写说明
程序烧写说明 USBASP下载器使用方法 启动下载软件PROGISP1.6.7 烧录步骤: 设置编程器及接口,编程器选择USBASP,接口为USB(如图) 选择芯片,在选择芯片下拉列表可以选择正在使用的单片机型号51或者avr均可(常用的51型号为AT89S52,常用的AVR型号为ATMEGA16) 设置熔丝位(若使用51单片机不需要设置熔丝,直接进入下一步),注意SPIEN要始终保持红色,否则容易造成芯片死锁。如图显示的是熔丝的位配置方式,如果不熟悉熔丝功能,可以点击位配置方式旁边的向导方式。设置好熔丝后点击写入。 加载所要烧录的程序文件:点击调入Flash,选择所要烧录的编译好的程序
[单片机]
<font color='red'>51单片机</font>程序烧写说明
SPI总线在51单片机系统中的实现
  一个完整的单片机系统,通常包括键盘输入、显示输出、打印输出、数据采集等许多功能模块。这些功能模块一般是通过I/O端口实现与单片机的数据交换,但是单片机的I/O端口有限,且一般用来处理数字信号,从而产生了总线式传输模式。   现在大多数单片机都是传统的三总线结构,即地址,数据,控制三总线。由于方便控制,三总线得到广泛的应用。但是作为并行总线,它也有一定的局限性。不适合远距离的传输。与I/O口的数目存在矛盾。随着电子技术的进步,发展出很多新的总线接口,如USB、I2C、CAN、SPI、1-Wire等。这些总线的特点都是串行接口,只需要几根甚至一根线就可以实现数据的传输。本文通过对支持SPI总线的AD器件MAX189性能分析,简要介
[嵌入式]
基于AT89C51单片机设计的简易智能机器人
   引言   随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。    1 设计思想与总体方案   1.1 简易智能机器人的设计思想   本机器人能在任意区域内沿引导线行走,自动绕障,在有光源引导的条件下能沿光源行走。同时,能检测埋在地下的金属片,发出声光指示信息,并能实时存储、显示检测到的断点数目
[单片机]
从零开始51单片机教程 —— 单片机条件转移指令
条件转移指令是指在满足一定条件时进行相对转移 判A内容是否为0转移指令 JZ rel JNZ rel 第一指令的功能是:如果(A)=0,则转移,不然次序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的办法,就要算偏移量,很麻烦,好在现在我们能借助于机器汇编了。因此这第指令我们能这样理解:JZ 标号。即转移到标号处。下面举一例说明: MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值不
[单片机]
从零开始<font color='red'>51单片机</font>教程 —— 单片机条件转移指令
51单片机定时中断实现显示的程序
第一位始终显示0,第二位显示在0-9之间循环 ;************************************************** Counter EQU 59H ;计数器,显示程序通过它得知现正显示哪个 数码管 FIRST EQU P2.7 ;第一位数码管的位控制 SECOND EQU P2.6 ;第二位数码管的位控制 DISPBUF EQU 5AH ;显示缓冲区为5AH和5BH ORG 0000H AJMP START ORG 000BH ;定时器T0的入口 AJMP DISP ;显示程序 ORG 30H START: MOV SP,#5FH ;设置堆栈 MOV P1,#0FFH MOV P0,#0FFH
[单片机]
51单片机你选“谁”?
一、AT89S51代替AT89C51的实质 MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、已经停产的89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。 兼容系列单片机,就是说MCS-51内核实际上已经成为一个8位单片机的标准。 不同公司的51单片机产品都是和MCS-51内核兼容的产品而以。同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS(菲利浦),和WINBOND(华邦)等, 89C51最致命的缺陷在于不支持ISP(在线更新程序)功能, 89S51在工艺上进行了改进,89S5
[单片机]
基于AT89C51单片机设计的简易智能机器人
引言 随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。 1 设计思想与总体方案 1.1 简易智能机器人的设计思想 本机器人能在任意区域内沿引导线行走,自动绕障,在有光源引导的条件下能沿光源行走。同时,能检测埋在地下的金属片,发出声光指示信息,并能实时存储、显示检测到的断点数目以及各断点至起跑线间的距离,
[单片机]
51单片机学习一 点亮LED实验
单片机芯片型号 STC89C516 需求 点亮第一个led灯 知识点 1.关于单片机上的i/o口 GPIO是通用输入输出端口的简称,可以通过软件来控制其输入和输出。51 单片机芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、 控制以及数据采集的功能。 不过 GPIO 最简单的应用还属点亮 LED 灯了,只需通过软件控制 GPIO 输出高低电平即可。当然GPIO 还可以作为输入控制,比如在引脚上接入一个按键,通过电平的高低判断按键是否按下。 2.关于led LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大, 会烧毁二极管。 发光二极管正极又称阳极,负极又
[单片机]
<font color='red'>51单片机</font>学习一 点亮LED实验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved