C51做闹钟:用1602显示时间,到点时间,蜂鸣器响或者灯亮,按K4停止

小灯亮

 #include <reg51.h>sbit k4=P3^3;sbit led = P2^1;sbit rs=P2^6;sbit rw=P2^5;sbit e=P2^7;char flag=0,count=0;int miao = 57;int fen = 59;int shi = 6;void delayms(int ms);bit check_busy();void lcdcom(unsigned char com);void lcddat(unsigned char dat);void main(){lcdcom(0x01);//清屏lcdcom(0x06);//光标右移,地址自动加1lcdcom(0x0e);//显示开,有光标,光标不闪烁lcdcom(0x38);//8位数据总线,2行显示,5*7点阵lcdcom(0x80);lcddat('t');lcddat('i');lcddat('m');lcddat('e');lcddat(':');TMOD = 0X01; //定时器0 工作方式为1,16位定时器TH0 = 0X3C;TL0=0xB0;//定时器50ms,设置初始值ET0=1;  //打开定时器0的中断开关(允许定时器0中断)EA=1;  //总中断打开TR0=1;  //启动定时器0while(1){lcdcom(0xc6);lcddat(0+0x30);lcddat(shi%10+0x30);lcddat(':');lcddat(fen/10+0x30);lcddat(fen%10+0x30);lcddat(':');lcddat(miao/10+0x30);lcddat(miao%10+0x30);if(shi==7&&fen==0&&miao==0) {   flag==1   ;led =0;}if (k4==0){flag =0; led=1;}while(k4==0);     delayms(10);IE0=0;}}
void time0() interrupt 1
{TH0 = 0X3C;TL0=0XB0;  //定时器50ms,初始的的值count++;if(count ==20){miao++;count=0;if(miao==60){fen ++;miao=0;   }if(fen==60){ shi++;fen =0;miao =0;}}
}   void delayms(int ms){     int i,j;for(j=0;j<ms;j++)for(i=0;i<180;i++);}bit check_busy(){      bit stat;rs=0;//读状态rw=1;//读有效e=0;delayms(1);e=1;delayms(1);stat=P0&0x80;e=0;delayms(1);return stat;}void lcdcom(unsigned char com){   while( check_busy());rs=0;//写指令rw=0;//写有效e=0;delayms(1);P0=com;   //指令,此时1602并不接收e=1;        //产生下降沿,1602接收指令delayms(1);e=0;delayms(1);       }void lcddat(unsigned char dat){      while( check_busy());rs=1;//写数据rw=0;//写有效e=0;delayms(1);P0=dat;   //数据,此时1602并不接收e=1;        //产生下降沿,1602接收数据delayms(1);e=0;delayms(1);       }

蜂鸣器响

 #include <reg51.h>sbit k4=P3^3;sbit led = P2^1;sbit rs=P2^6;sbit rw=P2^5;sbit e=P2^7;char flag=0,count=0;char i;int miao = 58;int fen = 59;int shi = 6;sbit beep=P1^5;//定义蜂鸣器的引脚void delayms(int ms);bit check_busy();void lcdcom(unsigned char com);void lcddat(unsigned char dat);void main(){lcdcom(0x01);//清屏lcdcom(0x06);//光标右移,地址自动加1lcdcom(0x0e);//显示开,有光标,光标不闪烁lcdcom(0x38);//8位数据总线,2行显示,5*7点阵lcdcom(0x80);lcddat('t');lcddat('i');lcddat('m');lcddat('e');lcddat(':');TMOD = 0X01; //定时器0 工作方式为1,16位定时器TH0 = 0X3C;TL0=0xB0;//定时器50ms,设置初始值ET0=1;  //打开定时器0的中断开关(允许定时器0中断)EA=1;  //总中断打开TR0=1;  //启动定时器0while(1){lcdcom(0xc6);lcddat(0+0x30);lcddat(shi%10+0x30);lcddat(':');lcddat(fen/10+0x30);lcddat(fen%10+0x30);lcddat(':');lcddat(miao/10+0x30);lcddat(miao%10+0x30);if(  k4==0)     {  delayms(1);flag=0; while(k4==0);delayms(1);   }}}
void time0() interrupt 1
{TH0 = 0X3C;TL0=0XB0;  //定时器50ms,初始的的值count++;if(count ==20){miao++;count=0;if(miao==60){fen ++;miao++;  }if(fen==60){ shi++;fen =0;miao =0;}} if(shi==7&&fen==0&&miao==0)flag=1    ;if (flag ==1) beep=~beep;}  void delayms(int ms){     int i,j;for(j=0;j<ms;j++)for(i=0;i<60;i++);}bit check_busy(){   bit stat;rs=0;//读状态rw=1;//读有效e=0;delayms(1);e=1;delayms(1);stat=P0&0x80;e=0;delayms(1);return stat;}void lcdcom(unsigned char com){   while( check_busy());rs=0;//写指令rw=0;//写有效e=0;delayms(1);P0=com;   //指令,此时1602并不接收e=1;        //产生下降沿,1602接收指令delayms(1);e=0;delayms(1);       }void lcddat(unsigned char dat){      while( check_busy());rs=1;//写数据rw=0;//写有效e=0;delayms(1);P0=dat;   //数据,此时1602并不接收e=1;        //产生下降沿,1602接收数据delayms(1);e=0;delayms(1);       }
蜂鸣器的用法:beep 是P1^5引脚,给高低电频(自定义脉冲信号)使蜂鸣器响起,
给低电平就响,高电平不响。如果蜂鸣器的声音过小时,Because 是程序中的延迟时间过长。
这时需要延迟时间缩短,尽量减少用while循环。

如果有帮助的话,请点个赞~~~

C51做闹钟:用1602显示时间,到时间,蜂鸣器响或者灯亮,按K4停止相关推荐

  1. vv7无法启动显示发动机故障_vv7旗舰发动机故障灯亮用不用处理?

    光这个问题加今天去了五次4S店了,来回六十多公里,前氧化传感器也换了,ecu模块也换了,电脑检测都是历史故障根本查不出问题!每次复位后开几时公里又亮了,4S服务态度好但问题解决不 光这个问题加今天去了 ...

  2. C51单片机 1602显示一排方块的问题

    先说结论:可能是插反了而已. 上一次碰单片机还是在三年前,这两天想做个简单的PM2.5监测装置,用的是郭天祥的2014版的的C52单片机开发板,结果第一步的1602显示问题就难倒我了.来来回回两个多小 ...

  3. 51单片机实现智能手表(秒表功能、读取温度、显示和修改时间日期、设置闹钟、显示星期)

    智能手表 项目说明 硬件设计 温度传感器 计算温度 读取温度 定时器中断 工作方式 定时器配置 硬件实物连接 软件设计 temp.h temp.c main.c 实验现象与总结 项目说明 用普中51和 ...

  4. 【Servlet】Cookie应用:显示上次访问页面时间

    #Q题目 要求: 显示上次访问页面时间,并添加清除Cookie功能 如下图: 清除Cookie #A 代码 实现Cookie显示上次访问时间 package com.tcb.cookie;import ...

  5. html页面显示动态日期时间,如何在网页中动态显示当前日期和时间(js调用)

    很多网站都会在顶部显示实时的日期,时间,而且时间可以根据自己电脑的时间自动的更新.就像网站上装了一个时钟一样,当用户进入我们做的网站时就会看到今天是哪一年,哪一月,哪一日,星期几,时,分,秒,并且它是 ...

  6. 51驱动DS1302制作电子时钟1602显示

    51驱动DS1302制作电子时钟1602显示 模组选型 模组选型解析 设计思路 产品接线 部分代码解析 总结 原文链接:https://www.yourcee.com/newsinfo/2928557 ...

  7. (原创)制作一个采用 LCD1602 显示的电子钟,在 LCD 上显示当前的时间。显示格式为“时时:分分:秒秒”。设有 4 个功能键k1~k4,功能如下:(1)k1——进入时间修改。

    (原创)制作一个采用 LCD1602 显示的电子钟,在 LCD 上显示当前的时间.显示格式为"时时:分分:秒秒".设有 4 个功能键k1-k4,功能如下: (1)k1--进入时间修 ...

  8. C51单片机实验——LCD 1602液晶显示器

    实验名称:利用1602实现数字时钟 实验环境:普中实验系统:Keil μVision 4软件: 实验目的: (1)掌握1602液晶显示器的工作原理和接口方法. (2)利用本课程前面所学的知识,实现数字 ...

  9. 基于51单片机的串口中断读头写尾法接收NMEA0183经纬度信息 1602显示(循环接收)

    51单片机 串口接收导航电文 设计方案 硬件构成 软件构成 测试情况 接收承载能力测试 传统接收方式测试 程序代码 传统程序中断部分代码 采用了读头写尾方法的程序 结论 传统的串口接收程序是采用设立中 ...

最新文章

  1. Pycharm中实现查找和替换
  2. https 请求白屏_记一次HTTPS性能优化
  3. linux下面navicat调整字体
  4. java面试线程必备知识点,怼死面试官,从我做起
  5. 狂雨CMS小说网站源码 附一套pc模板和两套手机模板(白色,蓝色)
  6. PowerShell正则替换+批量修改文件名
  7. hadop 查看DataNode的资源使用情况信息(web接口)
  8. 云计算实战系列五(Linux文件权限II)
  9. 苹果手机解压缩软件_装X教科书:买苹果电脑前应该了解哪些东西?
  10. UnicodeEncodeError:#39;ascii#39;编解码器无法在位置20编码字符u#39;\\ xa0#39;:序数不在范围内(128)
  11. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十九) 落雷!治疗!陷阱!连锁闪电!多段群伤!魔法之终极五重奏②...
  12. 一文看完“阿里云自动化运维沙龙 · 上海专场”整场干货
  13. #100天计划# 2013年10月8日
  14. iOS 修改app名称
  15. 2019校招秋招总结
  16. Image 图像转化为 PDF 文件
  17. 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战
  18. 笔记本电脑应用商店服务器错误,Windows10系统无法打开这个应用商店解决方法
  19. 模型评估:评估矩阵和打分
  20. okcc中FXS网关老掉注册要怎么解决?

热门文章

  1. 网易有道面经(2013校园招聘杭州站)zz
  2. 跑路不止、“幽灵所”激增,加密货币交易行业加速洗牌 |链捕手
  3. Cisco 2960X交换机支持多少条静态路由
  4. 179个CAD三维快捷键命令,帮CAD初学者迅速提升制图效率
  5. leetcode 优惠活动系统
  6. adb:) adb push、pull、logcat and etc
  7. html+css 微信界面(续一之html)
  8. Cadence Orcad Capture 快速启动功能介绍图文视频教程-键盘党的福音
  9. 发现了一个xmp/xmp标签可用来输出html代码
  10. Mysql : 对于表数据处理增删改的内容上的打字练习