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;

}

}

}

}

c语言打铃器单片机程序,51单片机自动打铃C语言程序相关推荐

  1. c语言六位抢答器课程设计,51单片机八路抢答器课程设计

    ;说明:本人的这个设计改进后解决了前一个版本中1号抢答优先的问题,并增加了锦囊的设置,当参赛选手在回答问题时要求使用锦囊,则主持人按下抢答开始键,计时重新开始. ;八路抢答器电路请看下图是用ps仿真的 ...

  2. c语言单片机定时器的应用程序,51单片机定时器中断程序(C语言)

    51c程序 51单片机定时器中断程序(C语言) 用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期 机器周期=12/n(n指晶 ...

  3. 8255A红绿灯c语言程序,51单片机外接8255A做成的交通灯程序及PROTEUS仿真结果(附对应C语言程序).doc...

    51单片机外接8255A做成的交通灯程序及PROTEUS仿真结果(附对应C语言程序) 51单片机外接8255A做成的交通灯程序及PROTEUS仿真结果(附对应C语言程序)2010-04-21 22:0 ...

  4. c51c语言编程的音乐程序,51单片机唱歌C51音乐程序.doc

    51单片机唱歌C51音乐程序 51单片机唱歌 C51音乐程序 unsigned char n 0; //n为节拍常数变量 unsigned char code music_tab[] 0x18, 0x ...

  5. 【51单片机】51单片机学习资料合集

    [51单片机]51单片机学习资料合集 资源文件架构 一次全部保存是保存不了的,超过了文件上限,需要分批保存,对于爱好学习和感兴趣学习51单片机的人来说是一波很不错的福利,希望大家多多支持. 51程序 ...

  6. pic单片机与51单片机,谁更易于学习?

    pic 单片机是学单片机人士必须掌握的一款单片机,对于 pic 单片机,小编层带来诸多介绍. 如果你对 pic 单片机很感兴趣,不妨翻阅往期文章.本文对 pic 单片机的介绍内容为:pic 单片机与 ...

  7. 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计

    基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 这里写目录标题 1 开发环境 2 功能说明介绍 3 仿真图 4 ...

  8. 时钟加闹钟c语言程序,51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)...

    <51单片机c语言电子钟(已加入调时.闹铃.整点报时功能)>由会员分享,可在线阅读,更多相关<51单片机c语言电子钟(已加入调时.闹铃.整点报时功能)(13页珍藏版)>请在技术 ...

  9. 秒表系统的设计c语言程序,51单片机秒表计时器课程设计报告(含C语言程序).doc...

    51单片机秒表计时器课程设计报告(含C语言程序) XXXXXX学院 51单片机系统设计 课程设计报告 题 目: 秒表系统设计 专业.班级: 学生姓名: 学 号: 指导教师: 分 数 : [摘要]本设计 ...

最新文章

  1. 从当前日期算起,获取几天前的日期和几个月前的日期
  2. 人类认知对设计规律有这些影响
  3. 数据科学中一些不常用但很有用的Python库
  4. java中如果写设置密码,在java中编写一个多字母换位密码[关闭]
  5. python 网络编程 struct解包时报错 struct.error: unpack requires a buffer of 4 bytes
  6. [2020-11-28 contest]素数(数学),精灵(区间dp),农夫约的假期(结论),观察(树链剖分lca+set)
  7. C++STL学习笔记(4) 分配器(Allocator)
  8. MyEclipse中使用Junit插件进行单元测试
  9. delphi 连接DBF
  10. 用 Handler 给图片加水印
  11. 【实用】excel中创建项目进度计划
  12. css3动画Animate.css插件与wow.js插件
  13. MySQL通过frm和idb恢复数据库的方法
  14. punycode转码以及UniCode编码表参考文章
  15. poi 复制下拉框内容入力规则
  16. mysql查询除某一列外的其他列
  17. java廖雪峰_廖雪峰Java教程学习笔记(一)——Java程序基础
  18. 利用WordPress REST API 开发微信小程序从入门到放弃
  19. 氢os android 7.0,氢OS 3.0正式推送!基于Android 7.0,简洁纯净
  20. 编译原理 实验4 语义分析(基于PL/0,使用C++代码编写)

热门文章

  1. Scrapy :爬取培训网站讲师信息
  2. 基于STM32的ADC电压采集(DMA传输)
  3. 跑分cpu_【性能】骁龙875跑分成绩曝光:CPU遥遥领先,GPU和麒麟9000旗鼓相当
  4. 计算机科学专业的五种高薪职业选择,看看你适合哪种?
  5. linux的内核设计,Linux内核设计的艺术 清晰完整版PDF+配套源码
  6. Bson类似于Protocol Buffer的数据形式,比json更轻量级更高效
  7. 快速学会!关于Android程序员最近的状况,已拿offer入职
  8. 通用自动化测试软件 — TAE
  9. 自动化测试报告表格html的生成(基于MATLAB)
  10. gitlab企业微信webhook机器人