8051写一个考研/雅思用的小计时器
想法来由
做题时缺个定时器
用手机定时?不想在做题时用手机。
某宝上买个定时器?
如图

9.9包邮?还是算了,没小钱钱

正好有块好久不用的8051,别积灰了,利用起来
显示屏是LCD1602,想利用oled的同学们可以自行更改代码

(啥?为啥不用32?为什么不用oled,串口屏?因为那些我还得频繁使用…这个51正好当桌上计时器)
上代码:
main函数

void main()
{Init_Timer0(); //初始化timerInitLcd1602();  //初始化lcd1602boot_Screen();   //初始化开机显示while(1){         KeyDriver();      //按键检测if(staSystem == E_Timing) {Show_Countdown();//定时时间到if(display[4] == flag_over||(display[4]== flag_over%16 && display[5]== flag_over/16)   ) {Timing_end();beep();  } }delay1(50);}}

display.c

#include "display.h"
#include "config.h"
#include "LCD1602.h"
extern uchar display[];
extern uchar display2[];void boot_Screen()   //初始化开机界面
{                   unsigned char *p = "Uncompromising";  //毫不妥协unsigned char *o = "      by Leon";InitLcd1602();          //1602初始化LcdShowStr(0,0,p);LcdShowStr(0,1,o);
}
/*function: 名称为显示倒计时,由于倒计时有较大延时,所以函数内仍然是正计时
*/
void Show_Countdown()
{uchar  i;for(i=0;i<6;i++){display2[i]=display[i]+0x30;  }//此处减一只是为了使右边3位空出来,当然觉得不美观可以用清屏函数解决LCD1602_Dis_OneChar(13-1,1,display2[0]);LCD1602_Dis_OneChar(12-1,1,display2[1]);LCD1602_Dis_OneChar(11-1,1,':');LCD1602_Dis_OneChar(10-1,1,display2[2]);LCD1602_Dis_OneChar(9-1,1, display2[3]);LCD1602_Dis_OneChar(8-1,1,':');LCD1602_Dis_OneChar(7-1,1,display2[4]);LCD1602_Dis_OneChar(6-1,1,display2[5]);LCD1602_Dis_OneChar(5-1,1,':');DisplayOneStr(3-1,1,display[6]);}
/*function: 显示选择时间界面
*/
void Show_interface(uint x)
{                                           uchar code  cdis1[ ] = {"     3min    "};uchar code  cdis2[ ] = {"     7min    "};uchar code  cdis3[ ] = {"     10min   "};uchar code  cdis4[ ] = {"     15min   "};uchar code  cdis5[ ] = {"     20min   "};uchar code  cdis6[ ] = {"     40min   "};uchar code  cdis7[ ] = {"Yes"};         //指示/*接下来该写页面滚动展示7min,10min等等   想办法与按键结合上 */LcdShowStr(13,0,cdis7);  switch (x){case 1: LcdShowStr(0,0,cdis1);LcdShowStr(0,1,cdis2);break;case 2: LcdShowStr(0,0,cdis2);LcdShowStr(0,1,cdis3);break;  case 3: LcdShowStr(0,0,cdis3);LcdShowStr(0,1,cdis4);break;case 4: LcdShowStr(0,0,cdis4);LcdShowStr(0,1,cdis5);break;case 5: LcdShowStr(0,0,cdis5);LcdShowStr(0,1,cdis6);break;case 6: LcdShowStr(0,0,cdis6);LcdShowStr(0,1,cdis1);break;}
}
/*function:  计时中止显示END
*/
void Timing_end()
{uchar code  t [ ] = {"*******END*******"};LcdShowStr(0,0,t);
}

app.c 这个文件是设置按键功能的文件

#include "config.h"
#include "Lcd1602.h"
#include "Key.h"
#include "main.h"
#include "app.h"
#include "display.h"extern uchar display[];             //为了能在启动计时时将定时器从零开始计时
static uint cnt=0;               //如果只有roll_up可以定义在函数内,但是roll_down需要共用此变量void begin_end()
{  uint z;static uint k=0;   //为了能中止计时,若无此静态变量,则无法开始(begin)计时if (staSystem == E_SET_TIME || staSystem == E_T_END)  //  状态变量,此时为begin{Init_Timer0();            //开始计时for(z=0;z<7;z++) display[z]=0;       //全部回零开始计数 ,在测试时这里别忘了注释掉,测试成功staSystem = E_Timing;  //改变变量为计时状态    }if(staSystem == E_Timing && k%2==1) //如果为计时状态,需要计时中止{staSystem = E_T_END;           //换状态,配合main函数可以使显示卡在按按钮时的时间} k++ ;KEY_S2_ON=1;
}
/*function:屏幕上滚函数将Show_interface(cnt)函数和Set_Time(uint t)嵌入,其根本目的是分离显示函数的定义位置以及简化每个函数的代码行数,这样简洁易读,便于维护
*/
void Roll_up()
{  if (staSystem == E_SET_TIME){  Show_interface(1);   //初始化cnt++;               //cnt++的位置需要注意if(cnt==7) cnt=0;switch (cnt){case 1:  Show_interface(cnt); Set_Time(0x03);break;case 2:  Show_interface(cnt); Set_Time(0x07);break;case 3:  Show_interface(cnt); Set_Time(0x10);break;case 4:  Show_interface(cnt); Set_Time(0x15);break;case 5:  Show_interface(cnt); Set_Time(0x20);break;case 6:  Show_interface(cnt); Set_Time(0x40);break;}}KEY_S3_ON=1;
}
/*function:屏幕下滚函数
*/
void Roll_down()
{if (staSystem == E_SET_TIME){  cnt--;if(cnt==0) cnt=5;switch (cnt){case 1:  Show_interface(cnt); Set_Time(0x03);break;case 2:  Show_interface(cnt); Set_Time(0x07);break;case 3:  Show_interface(cnt); Set_Time(0x10);break;case 4:  Show_interface(cnt); Set_Time(0x15);break;case 5:  Show_interface(cnt); Set_Time(0x20);break;case 6:  Show_interface(cnt); Set_Time(0x40);break;} }KEY_S4_ON=1;
}
/*function:返回函数注意:只有当计时中止(即s2被再次按下后)此按键才能生效
*/
void Back()
{if (staSystem == E_T_END)  staSystem = E_SET_TIME;Roll_up();                  //为了回到显示界面KEY_S5_ON=1;
}
/************按键系统**************/void KeyDriver(){if(KEY_S2_ON==0){      //确定/计时开始/中止begin_end();}else if(KEY_S3_ON==0){ //上滚Roll_up();}else if(KEY_S4_ON==0){ //下滚 Roll_down();}else if(KEY_S5_ON==0){ // backBack();}}

我感觉大家也不喜欢看一片一片的代码,我把代码上传到GitHub上了,大家直接下载即可。

https://github.com/integratedcircuit/8051-
附效果图

后记:去年2月份疫情在家做了带设置闹钟和测量环境温度的万年历(51和32版本都有,32采用的是oled),以后有时间再写博客吧。没想到这么快一年过去了,感觉都没做什么哈哈。
时不我待,加油

8051写一个考研/雅思用的小计时器相关推荐

  1. 【雅思经验】[小木虫]

    这些是俺当时复习雅思的一些心得,希望能对烤鸭们有所帮助. 复习资料: J       十天突破雅思口语 J       十天突破雅思写作 J       剑桥雅思系列 3-8(主力) J       ...

  2. 雅思作文模板.html,雅思G类小作文万能模板参考

    雅思G类小作文万能模板参考 考生掌握一些高分的写作模板,是备考雅思G类小作文必不可少的一项技能.快来看看小编为你准备了雅思G类小作文高分的万能模板,欢迎大家阅读! 雅思G类小作文万能模板:道歉信 1. ...

  3. python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...

    一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...

  4. 雅思备考笔记—小作文篇(柱状图)

    雅思小作文Bar Chart目录 一.Bar chart(柱状图)的类型 二.Bar Chart Question 三.Simon写作实例: 三.Bar Chart 万能词 一.Bar chart(柱 ...

  5. 用python写一个圣诞互换礼物的抽奖小程序

    目的 最近和朋友们想玩圣诞互换礼物,但是没找到可以抽奖的小程序,所以我决定自己写一个. 游戏规则:参加游戏的人需要随机抽取一个幸运儿送一个礼物,但是注意不要抽到自己,并且不要重复抽同一个人. 思路 准 ...

  6. 用C语言写一个可以选择关卡添加关卡的小游戏,推箱子

    目录 关于用C语言写一个可以选择关卡的小游戏 代码部分 所有代码 Tui_Xiang_Zi.h Tui_Xiang_Zi.cpp 关卡数据 关卡数据规则 思路和建议 建议 警告 关于用C语言写一个可以 ...

  7. 手把手教你写一个没有服务器的颜值打分小程序,可直接上线

    小程序现在可以说非常火爆了,流量入口非常多.尤其是出了流量主功能以后,普通开发者也能在自己的个人小程序里植入官方广告来获取收入.程序员想赚点外快再合适不过了.今天教大家写一个颜值打分的小程序,利用现成 ...

  8. 写一个音乐播放器的微信小程序

    要创建一个音乐播放器的微信小程序,您需要熟悉微信小程序的开发环境和语言(如 JavaScript 和 WXML/WXSS). 具体来说,您需要做以下几件事: 设计音乐播放器的用户界面,并使用 WXML ...

  9. 写一个实时监控IP连通性的小脚本

    #!/bin/bash ##连通性观察记录小脚本 ##得出的的结果应该是18秒每次的间隔,添加监控IP只需要修改PIP的变量值即可 ##运行时只需要sh shell_name & ##结束时只 ...

最新文章

  1. 面试题;40个多线程的问题 背1 有用
  2. java输出数组中出现的次数最多的那个及次数
  3. 2021年春季学期-信号与系统-第十二次作业参考答案-第三小题
  4. WinApi学习笔记-获取电脑中磁盘信息
  5. 关于跨DB增量(增、改)同步两张表的数据小技巧
  6. why jQuery.clone does not work as expected
  7. C#的变迁史02 - C# 2.0篇
  8. 计算机管理 内存在哪里看,教您win7怎么查看内存
  9. winpe硬盘安装linux,winpe+linux安装到移动硬盘
  10. Unity经验分享——如何实现黑洞吸附效果
  11. 【Tools】Coverity代码静态检测工具
  12. 基于MATLAB的光纤通信仿真
  13. 自我思考:世界观与方法论——关于做事方法,情商,智商,爱商的深入思索
  14. oracle 金,炼数成金深入Oracle视频课程
  15. Unity 3D模型展示之模型高亮
  16. 计算机瞬间关闭所有程序的方法,Win10如何设置关机时快速关闭所有程序
  17. 自媒体视频搬运,技术分享给大家!
  18. 51单片机流水灯现象1
  19. 华为计算机黑屏怎么办,华为电脑开机屏幕没反应(开机黑屏的3个原因及解决法)...
  20. zen cart产品分类及产品管理

热门文章

  1. 牛客国庆集训派对Day5B电音之王(Montgomery modular multiplication)
  2. 二叉树:用递归的方式打印纸条折痕
  3. XML是什么,它可以做什么?——写给XML入门者 (转自Sank Orange)
  4. 怎样调用星图地球数据云的开发接口?
  5. 主播-主播连麦实现方式
  6. 为何 navigator.appName 的值都是 netscape?
  7. 变电站仪器仪表检测图像数据集
  8. lcd屏和oled屏哪个更护眼 lcd屏和oled屏哪个耐摔
  9. 数值计算方法上机c语言编程,数值计算方法上机实验报告.doc-资源下载在线文库www.lddoc.cn...
  10. 网页内嵌入百度搜索的源代码-站长FAQ