要求:
1、计时范围:0~59分59.59秒,整数四位数和小数两位数显示;
2、计时精度10毫秒;
3、复位按钮,计时器清零,并做好下次计时准备;
4、可以对两个对象(A、B)计时,具有启/停控制;
3、设开始、停止A、停止B、显示A、显示B、复位按钮。
一、Protues仿真图:
二、程序源码:
因为注释非常的全,这里就不再进行讲解了。
/*******************************************************************************
================================================================================
【平 台】STC89C51_sumjess平台
【编 写】sumjess
【E-mail 】1371129880@qq.com
【软件版本】V2.0
【最后更新】2019年06月10日
【相关信息参考下列地址】
【网 站】
https://blog.csdn.net/qq_38351824
http://www.51hei.com/bbs/mcu-2-1.html
---------------------------------------------------------------------------------
【dev.env.】MDK4.02及以上版本
【Target 】STC89C51
第一次修订:2019/05/09
第二次修订:2019/05/21
第三次修订:2019/06/10
【problem 】
(1)库内补充的不全面;
(2)库内解释部分不全面;
(3)库内还存在一定的bug;
【direction】
下一步的目标就是把库继续集成!
【explain 】
为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!
【warning】
目前程序中暂无错误 !
---------------------------------------------------------------------------------
没有完美的代码,只有不断的奉献,大家一起努力;
赠人玫瑰手留余香,欢迎大家反馈bug!
================================================================================
********************************************************************************/
#include #define uint unsigned int //宏定义无符号整型数据 #define uchar unsigned char //宏定义无符号字符型数据 sbit key1=P3^6; //开始按键 sbit key2=P3^0; //停止按键A sbit key3=P3^1; //停止按键B sbit key4=P3^2; //显示按键A sbit key5=P3^3; //显示按键B sbit key6=P3^4; //复位按键 sbit dula=P2^6; //段 sbit wela=P2^7; //位 uchar code table[]={ //0~f段码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar Cntus=0,Cnt10ms=0,Cnt1s=0,Cnt1min=0;//中断计时变量 uchar Cntus_A=0,Cnt10ms_A=0,Cnt1s_A=0,Cnt1min_A=0;//存储A的数据 uchar Cntus_B=0,Cnt10ms_B=0,Cnt1s_B=0,Cnt1min_B=0;//存储B的数据 bit stop=0; //停止标志 void display(); //显示程序声明 void keyscan(); //按键扫描程序声明 /***********按键扫描程序****************/ void keyscan() { if(key1==0) stop=1; //开始计时 if(key6==0) //复位计时 { stop=0; Cntus=0; Cnt10ms=0; Cnt1s=0; Cnt1min=0; } if(key2==0){ //A停止,存储数据 Cntus_A=Cntus;Cnt10ms_A=Cnt10ms;Cnt1s_A=Cnt1s;Cnt1min_A=Cnt1min;} if(key3==0){ //B停止,存储数据 Cntus_B=Cntus;Cnt10ms_B=Cnt10ms;Cnt1s_B=Cnt1s;Cnt1min_B=Cnt1min;} if(stop==0){ //当复位即计时结束后,才可以进行查看 if(key4==0) //A显示 { Cntus=Cntus_A;Cnt10ms=Cnt10ms_A;Cnt1s=Cnt1s_A;Cnt1min=Cnt1min_A; } if(key5==0) //B显示 { Cntus=Cntus_B;Cnt10ms=Cnt10ms_B;Cnt1s=Cnt1s_B;Cnt1min=Cnt1min_B; } } } /***********定时器初始化程序****************/ void Timer0Init(void) //2.5毫秒@11.0592MHz { TMOD = 0x01; //设置定时器模式 TL0 = 0x00; //设置定时初值 TH0 = 0xF7; //设置定时初值 TR0 = 1; //定时器0开始计时 EA=1; //开总中断 ET0=1; //开定时器0中断 } /***************主程序****************/ void main() { Timer0Init(); //定时器初始化 while(1) { keyscan(); //按键扫描 display(); //显示程序 } } /**************中断服务程序*****************/ void timer0() interrupt 1 //2.5毫秒@11.0592MHz { TL0 = 0x00; //设置定时初值 TH0 = 0xF7; //设置定时初值 Cntus++; //中断变量Cntus自+1 if(Cntus>=4) //10ms { Cntus=0; //清0 if(stop==1) //启动的前提是计时按键按下 Cnt10ms++; //10毫秒计数 if(Cnt10ms>=100) { Cnt10ms=0; Cnt1s++; //秒计数 if(Cnt1s>=60) { Cnt1s=0; Cnt1min++; //分计数 if(Cnt1min>=100) Cnt1min=0; } } } } void display()//显示程序 { static uchar count=0; //计数变量 作用是是函数一直在循环 P0=0x00; //消隐 dula=1; dula=0; switch(count) { case 0: P0=table[Cnt1min/10]; //显示十分位 dula=1; dula=0; P0=0x7e; wela=1; wela=0; count++; break; case 1: P0=table[Cnt1min%10]|0x80;//显示分位加点 dula=1; dula=0; P0=0x7d; wela=1; wela=0; count++; break; case 2: P0=table[Cnt1s/10]; //显示十秒位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; count++; break; case 3: P0=table[Cnt1s%10]|0x80;//显示秒个位加点 dula=1; dula=0; P0=0x77; wela=1; wela=0; count++; break; case 4: P0=table[Cnt10ms/10]; //显示十分秒位 dula=1; dula=0; P0=0xef; wela=1; wela=0; count++; break; case 5: P0=table[Cnt10ms%10]; //显示百分秒位 dula=1; dula=0; P0=0xdf; wela=1; wela=0; count=0; break; } }
上一篇:课程设计题五:汽车尾灯控制器设计
下一篇:课程设计题四:LED彩灯控制器设计
推荐阅读
史海拾趣
Ericsson公司在早期就非常注重市场拓展和全球布局。通过与各国电信运营商建立合作关系,Ericsson成功将其产品和服务推广到了全球各地。特别是在中国市场,Ericsson早在19世纪90年代就与中国签订了供货合同,成为中国通信网络建设的重要参与者。如今,Ericsson已经在中国扎根130余年,成为了唯一一家从1G到5G全程参与中国通信网络建设的企业。
在电子行业的早期,Cressall Power Resistors公司以其对电阻技术的深入研究而脱颖而出。公司研发团队通过不懈的努力,成功开发出一种新型的功率电阻器,具有更高的耐热性、更低的电阻值变化率以及更长的使用寿命。这一技术突破迅速得到了市场的认可,公司因此获得了大量的订单,业绩迅速增长。随着技术的不断完善和产品的持续升级,Cressall逐渐在功率电阻器市场树立了技术领先的地位。
华为,作为中国的科技巨头,其在电子行业的发展历程中展现出了强大的技术实力和全球视野。华为在通信领域取得了多项技术突破,如5G技术的领先和智能手机拍照技术的创新。同时,华为还积极拓展全球市场,与全球运营商建立了广泛的合作关系。然而,面对国际市场的复杂环境和竞争压力,华为也面临着诸多挑战和不确定性。
华为,作为中国的科技巨头,其在电子行业的发展历程中展现出了强大的技术实力和全球视野。华为在通信领域取得了多项技术突破,如5G技术的领先和智能手机拍照技术的创新。同时,华为还积极拓展全球市场,与全球运营商建立了广泛的合作关系。然而,面对国际市场的复杂环境和竞争压力,华为也面临着诸多挑战和不确定性。
在电子行业中,技术创新是企业持续发展的关键。动运科技始终将技术创新作为公司的核心竞争力,不断投入研发资源,推动产品升级和技术创新。近年来,公司在自动对焦和光学防抖技术方面取得了重大突破,成功应用于音圈马达驱动芯片中,为智能手机等设备的摄像头模组提供了更加稳定、清晰的成像效果。这一技术的成功应用,不仅提升了动运科技在业界的地位,也为公司带来了广阔的市场前景。
1999年,Carles Puente博士和Ruben Bonet联合创立了Fractus公司,致力于将几何结构天线技术商业化。公司成立之初便取得了重大突破,获得了全球首个分形天线和多重分形天线专利。这些专利不仅展示了Fractus在天线设计领域的领先地位,也为公司后续的发展奠定了坚实的技术基础。
在分析 SR 电机 相电流的基础 上,通过检测相 电流 梯度的变化来检测 电机转子位 置,以实现无位置传感器 的 SRD系统。为解决系统起动和低速运行 问题 ,引入 了软件定位 和斩波控制 ;为提 高高速运行 时的转矩 ,加入 了角度位置控制。将无位置传 ...… 查看全部问答∨ |
Bob Pease is an analog integrated circuit design expert.[1] He has designed several very successful integrated circuits, many of them in continuous production for multiple decades. These include the LM331 voltage to frequency conv ...… 查看全部问答∨ |
现在要为已经有的驱动程序(以前通过手工的方式拷贝文件和执行注册表文件)编制INF文件,但是不知道其GUID,导致Windows通过编制的INF文件,仍然无法识别驱动程序。 请问有没有什么办法获取原有驱动文件的GUID(源代码已经丢失)?… 查看全部问答∨ |
急急急!!!关于wince版的“Resco Picture Viewer”图片浏览软件 有谁用过在wince下能运行的Resco Picture Viewer图片浏览软件啊,我同步安装后在多普达上能用,但是再拷到wince版的游戏机上就要注册码啦,怎么回事啊?谁用过啊?我就是想能在wince上浏览gif格式图片,怎么找不到这样的能在wince下运行的浏览软件 ...… 查看全部问答∨ |
先转过来供大家参考 这里介绍一个简单、实用的应急灯的制作。它可以在停电时自动实现切换供电。正常供电时,自动对后备蓄电池充电,并有充电保护功能。其电路见图1。下面介绍其工作原理。 在供电正常时,J2得电吸合,其动触点与“N ...… 查看全部问答∨ |
|
我安装的是Windows 7 64bit的操作系统,其他无论是arm,单片机,FPGA的仿真器或者编程器识别都没有问题,单单就是 TI的仿真器驱动无法识别,作为这么大的一家跨国公司不至于这么简单的一款产品都弄不出来吧?… 查看全部问答∨ |
|