秒表-六位数码管有效显示2

秒表-六位数码管有效显示2
秒表-六位数码管有效显示2

秒表-六位数码管有效显示 C51单片机

1.#include

2.#include

3.#define uchar unsigned char

1.void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255

2.void key_scan(); // 按键扫描

3.void key_to(); // 按键处理

4.

5.uchar code dis_code[11] = {0xc0,0xf9,0xa4,0xb0,0x99, //段

码表

6.//

0 1 2 3 4 对应内容

7. 0x92,0x82,0xf8,0x80,0x90,0xbf};

8.// 5 6 7 8 9 - 9.

10.uchar data dis[8]; // dis[0]为百分之一秒值,dis[1]为十分之

一秒值

11. // dis[2],dis[5]为'-'段码的偏移量

12. // dis[3]为秒个位值,dis[4]为秒十位

13. // dis[6]为分个位值,dis[7]为分十位

14.

15.uchar data dot = 0; // 百分之一秒计数器(0.00s-0.99s)

16.uchar data sec = 0; // 秒计数器(00s-59s)

17.uchar data min = 0; // 分计数器(00m-99m)

18.

19.uchar data dis_b; // dis_b为位码选通数码管

20.uchar data dis_r; // dis_r为取段码时的偏移量

21.

22.uchar data key_t = 0; // 按键次数,初始为0

23.

24.sbit K = P1^4; // K键与P1.4相连

25.

26.void main()

27.{

28. P2 = 0xff; // 关所有数码管

29. P1 = 0xff; // p1为准双向口,作输入时先写1

30. dis[2] = 10; // '-'在段码表中偏移量为10

31. dis[5] = 10; // '-'在段码表中偏移量为10

32. dis_b = 0x7f; // 初始选通P2.7口数码管

33. dis_r = 0; // 初始化偏移量为0

34.

35. TMOD = 0x11; // 定时/计数器0,1工作于方式1

36. TH0 = 0xd8; // 预置定时常数55536(d8f0),产生10ms时

基信号

37. TL0 = 0xf0;

38. TH1 = 0xfc; // 预置定时常数64536(fc18),产生1ms间

隔用于动态显示

39. TH1 = 0x18;

40. EA = 1; // 开总中断

41. ET0 = 1; // 定时/计数器0允许中断

42. ET1 = 1; // 定时/计数器1允许中断

43. TR0 = 0; // 关闭定时/计数器0

44. TR1 = 1; // 启动定时/计数器1

45. while(1)

46. {

47. if(K != 1) // 有键按下

48. {

49. delay_ms(10); // 延时10ms去抖

50. if(K != 1) // 确定是有键按下

51. {

52. while(K != 1); // 等待键松开

53. key_to(); // 按键处理

54. }

55. }

56. }

57.}

58.void key_to() // 按键处理子程序

59.{

60. key_t++; // 按键次数加1

61. if(key_t == 1) // 第一次按下

62. TR0 = 1; // 启动定时器0

63. else

64. {

65. if(key_t == 2) // 第二次按下

66. TR0 = 0; // 关闭定时器0

67. else

68. {

69. if(key_t == 3) // 第三次按下

70. {

71. dot = 0; // 三个计数器清零

72. sec = 0;

73. min = 0;

74. key_t = 0; // 按键次数清零

75. }

76. }

77. }

78.

79.}

80.void tiem0(void) interrupt 1 // T/C0中断服务程序(产生10ms时

基信号)

81.{

82. dot++; // 百分之一秒计数器加1

83. if(dot == 100) // 计数值到100

84. {

85. dot = 0; // 清零

86. sec++; // 秒计数器加1(进位

10ms*100=1s)

87. if(sec == 60) // 秒计数值到60

88. {

89. sec = 0; // 秒计数器清零

90. min++; // 分计数器加1(进位60s=1m)

91. if(min == 100) // 分计数到100

92. min = 0; // 分计数器清零

93. }

94. }

95. TH0 = 0xd8; // 重置定时常数

96. TL0 = 0xf0;

97.}

98.void time1(void) interrupt 3 // T/C1中断服务程序(延时1ms数码

管动态显示)

99.{

100. dis[0] = dot % 10; // 百分之一秒计数器个位分离出来赋绐dis[0]

101. dis[1] = dot / 10; // 百分之一秒计数器十位分离出来赋绐dis[1]

102. dis[3] = sec % 10; // 秒计数器个位赋绐dis[3] 103. dis[4] = sec / 10; // 秒计数器十位赋绐dis[4] 104. dis[6] = min % 10; // 分计数器个位赋绐dis[6] 105. dis[7] = min / 10; // 分计数器十位赋绐dis[7] 106.

107.P0 = dis_code[dis[dis_r]]; // 段码送P0口

(dis[0]...dis[7])

108.P2 = dis_b; // 位码送P2口

109.

110. dis_r++; // 偏移量加1,下次中断时显示下个数

111. dis_r &= 0x07; // dis_r增到8时自动清0(使之在0到7间循环)

112.

113. dis_b = _cror_(dis_b,1); // 位码循环右移,下次中断时选通下个数码管

114.

115.TH1 = 0xfc; // 重置定时常数

116.TL1 = 0x18;

117.

118.}

119.void delay_ms(uchar ms) // 延时毫秒@12M,ms最大值255

120.{

121.uchar i;

122.while(ms--)

123.for(i = 0; i < 124; i++);

124.}

基于51单片机的4位数码管秒表

原理图: 源程序: /************************************************************* 标题:定时器中断精确到00.01的秒表 效果:能清零重新开始,暂停,继续计时,能精确到0.01秒 作者:皖绩小挺 说明:使用12M晶振,四位数码管,3个按键 ****************************************************************/ #include #define uint unsigned int #define uchar unsigned char uint temp,tt,qian,bai,shi,ge; sbit smg_q=P1^0; sbit smg_b=P1^1; sbit smg_s=P1^2; sbit smg_g=P1^3; sbit key1 = P3^7; sbit key2 = P3^6; sbit key3 = P3^5; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90};

uchar code table1[]={0x40,0x79,0x24,0x30,0x19, 0x12,0x02,0x78,0x00,0x10}; //带小数点 void keyscan(); void display(uint shi,uint ge); void delay(uint z); void init(); /************************************************************** 主函数 ******************************************************************/ void main() { init();//初始化子程序 while(1) { if(tt==1) { tt=0; temp++; if(temp==10000) { temp=0; } qian=temp/1000; bai=temp%1000/100; shi=temp%100/10; ge=temp%10; } keyscan(); display(shi,ge); } } /********************************************************************* 延时 ***********************************************************************/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*********************************************************************

用6位数码管显示时间

#include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; sbit key4=P3^7; sbit fm=P2^3; uchar num,num1,num2,num3,temp; void init(); void keyscan(); //void jianpan(); void delay(uint a) { uint x,z; for(x=a;x>0;x--) for(z=10;z>0;z--); } uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71, }; unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef}; void display1(uchar numdi) //秒钟显示函数 { uchar fen,miao; fen=numdi/10; miao=numdi%10; dula=1; P0=table[fen]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(20); dula=1;

P0=table1[miao]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(20); } void display(uchar numdis)//分钟显示函数{ uchar shi,ge; shi=numdis/10; ge=numdis%10; dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(20); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delay(20); } void display2(uchar numd2)//小时显示函数{ uchar xshi,xfen; xshi=numd2/10; xfen=numd2%10; dula=1; P0=table[xshi]; dula=0; P0=0xff; wela=1; P0=0xfe;

基于DS1302的数码管显示数字钟

单片机原理课程设计 课题名称:基于DS1302的数码管显示数字钟 专业班级:电子信息工程 学生学号: 学生姓名: 指导教师: 设计时间:2010年6月21日--2010年6月25日

目录 摘要........................................................................................................................................................................ 1 设计任务和要求............................................................................................................................................ 2 方案论证........................................................................................................................................................ 3 系统硬件设计................................................................................................................................................ 3.1 系统总原理图 ................................................................................................................................ 3.2 元器件清单...................................................................................................................................... 3.3 PCB板图....................................................................................................................................... 3.4 Proteus仿真图 ............................................................................................................................... 3.5 分电路图及原理说明................................................................................................................... 3.5.1 主控部分(单片机MCS-51).............................................................................. 3.5.2 计时部分(实时时钟芯片DS1302).................................................................. 3.5.3 显示部分(共阳极数码管)................................................................................ 3.5.4 调时部分(按键)................................................................................................ 4系统软件设计................................................................................................................................................ 4.1 程序流程图..................................................................................................................................... 4.2 程序源代码........................................................................................................................................ 5心得体会........................................................................................................................................................ 6参考文献........................................................................................................................................................ 7结束语............................................................................................................................................................

数码管显示转换的电压值数码管显示秒表

数码管显示转换的电压值数码管显示秒表 标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]

电子科技大学微电子与固体电子学院 实验报告 实验名称现代电子技术综合实验 姓名:詹朋璇 学号:20 评分: 教师签字 电子科技大学教务处制

电子科技大学 实验报告 学生姓名:詹朋璇学号: 20 指导教师:熊万安 实验地点: 211大楼308 实验时间:2014. 晚 一、实验室名称:单片机技术综合实验室 实验项目名称:数码管显示A/D转换的电压值&数码管显示秒表 二、实验学时: 12 三、实验目的与任务: 1、熟悉系统设计与实现原理 2、掌握KEIL C51的基本使用方法 3、熟悉实验板的应用 4、连接电路,编程调试,实现各部分的功能 5、完成系统软件的编写与调试 四、实验器材 1、PC机一台 2、实验板一块

五、实验原理、步骤及内容 试验要求:数码管的第1位显示任务号1,第3位到第5位显示、A/D转换的电压值,可调节电压,第7、8位显示两位学号;数码管第2位和第6位显示“-”号; 按按键key1进行切换,此时数码管第1位显示任务号2,第7、8位显示循环倒计时的秒表,范围为08秒到01秒后,再过01秒,秒表又显示为08秒;(单片机系统中利用定时器/计数器计数秒表的值:利用定时器T0延时1秒进行计数。),其它位显示不变,按按键key2时,秒表停止计数,再按按键key2时,秒表继续计数,按key1键,又回到任务1的显示状态。 当电压值大于2伏时,按按键不起作用。 1、硬件设计(可打印) 2、各部分硬件原理(可打印) 数码管动态扫描 TLS549ADC工作时序图 3、软件设计 按下

6位7段LED数码管显示

目录 1. 设计目的与要求..................................................... - 1 - 1.1 设计目的...................................................... - 1 - 1.2 设计环境...................................................... - 1 - 1.3 设计要求...................................................... - 1 - 2. 设计的方案与基本原理............................................... - 2 - 2.1 6 位 8 段数码管工作原理....................................... - 2 - 2.2 实验箱上 SPCE061A控制 6 位 8 段数码管的显示................... - 3 - 2.3 动态显示原理.................................................. - 4 - 2.4 unSP IDE2.0.0 简介............................................ - 6 - 2.5 系统硬件连接.................................................. - 7 - 3. 程序设计........................................................... - 8 - 3.1主程序......................................................... - 8 - 3.2 中断服务程序.................................................. - 9 - 4.调试............................................................... - 12 - 4.1 实验步骤..................................................... - 12 - 4.2 调试结果..................................................... - 12 - 5.总结............................................................... - 14 - 6.参考资料........................................................... - 15 - 附录设计程序汇总.................................................... - 16 -

51单片机数码管时钟电路的设计_AT89C51

广东石油化工学院 《51单片机原理与实践》课程设计报告 学院计算机与电子信息学院 专业 班级 学号 姓名 指导教师 课程成绩 完成日期 2010年12月27日

数码管时钟电路的设计 一、设计目的: 通过这次课程设计掌握单片机系统的基本设计步骤及设计思路,掌握汇编语言的用法及各种指令的含义,比较熟练的运用指令进行单片机系统的设计的,熟悉用KEIL软件进行汇编语言的汇编,以及把代码写入实验板中,观测代码结合实际的运行结果后进行调整,体会到编程的分析问题、确定算法、画程序流程图、编写程序、程序功能模块化的优点的各各步骤。 二、设计要求: LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示。该电路采用AT89C2051单片机,使用3V电池供电,只使用一个按键开关即可进入调时、省电(不显示LED数码管)和正常显示三种状态。 三、设计实验内容: 1. 硬件的设计 其采用AT89C51单片机应用设计,LED显示采用动态扫描方式实现,P0口输出段码数据,P2口输出位码数据,P1.1、P1.2接按钮开关。为了提供LED数码管的驱动电流,采用6MHz晶振。 2. 系统总体分析 系统主要包含四大模块:显示模块、时间计时模块、模式切换模块和模式设置模块。 显示模块:主要由主循环负责。内存中开辟了一段8字节的内存空间,

用作数据显示的字符缓冲区。主循环不断将缓冲区中的字符呈现至数码管。 ● 时间计时模块:电子钟的核心模块,记录了时间的时、分、秒信息。 ● 模式切换模块(MODE ):切换电子钟的设置模式,包括时设置、分设置、秒设置、闹铃开关设置、闹铃时设置和闹铃分设置。相关数据被设置时将闪烁显示。 ● 模式设置模块(CONFIG ):通过判断设置模式(MODE ),执行相应的设置。如时、分、秒的增1以及闹铃开关的变换。 另外,主循环还负责扫描键盘,检测相应键是否被按下,若MODE 键被按下则在特定单元中登记该功能,并启动定时器1,然后返回继续执行显示功能。在定时器1中断时,被登记的功能正式执行。期间用时约10ms ,用以消除机械抖动。 主循环流程图大致如下: 图(一)主循环流程图 定时器1中断服务程序流程图如下: 开始 键被按下 登记相应功能 数码管显示 是 否

用LED数码管显示的秒表设计

单片机课程设计说明书 用LED 数码管显示的秒表设计 专业 电气工程及其自动化 学生姓名 刘宁 班级 B 电气081 学 号 04 指导教师 张兰红 完成日期 2011年 6月 26 日

目录 1、概述 (2) 2、课题方案设计 (2) 系统总体设计要求 (2) 系统模块结构论证 (2) 3、系统硬件设计 (3) 总体设计 (3) 单片机运行的最小系统 (4) 52单片机最小系统电路介绍 (4) 单片机的振荡电路与复位电路 (7) 数码管介绍 (8) 驱动电路 (9) 4、软硬件联调及调试结果 (10) 软硬件调试中出现的问题及解决措施 (10) 实物图 (11) 调试结果 (13) 5、结束语 (13) 参考文献 (14) 附录 (14) 附录1:基于单片机的秒表设计原理图 (14) 附录2:基于单片机的秒表设计PCB图 (15) 附录3:PROTEUS仿真图 (16) 附录4:基于单片机的秒表设计C语言程序清单 (17) 附录5:基于单片机的秒表设计元器件目录表 (19)

1、概述 21世纪是一个电子技术和电子元件有更大发展的世纪。回顾百年来电子技术和电子工业发展的成就,举世瞩目。作为一个电气专业的大学生,我们不但要有扎实的基础知识、课本知识,还应该有较强的动手能力。现实也要求我们既精通电子技术理论,更要掌握电子电路设计、实验研究和调试技术。课程设计就是一个理论联系实际的机会。 本次设计主要完成具备基本功能的电子秒表的理论设计,电子秒表是重要的记时工具,广泛运用于各行各业中。作为一种测量工具,电子秒表相对其它一般的记时工具具有便捷、准确、可比性高等优点,不仅可以提高精确度,而且可以大大减轻操作人员的负担,降低错误率。 在设计中应用到数码管,数码管主要用于楼体墙面,广告招牌、高档的DISCO、酒吧、夜总会、会所的门头广告牌等。特别适合应用于广告牌背景、立交桥、河、湖护栏、建筑物轮廓等大型动感光带之中,可产生彩虹般绚丽的效果。用护栏管装饰建筑物的轮廓,可以起到突出美彩亮化建筑物的效果。事实证明,它已经成为照明产品中的一只奇葩,绽放在动感都市。 2、课题方案设计 系统总体设计要求 用AT89C52设计一个2位LED数码显示“秒表”,显示时间为00~59秒,每秒自动加一。另设计一个“开始”按键和一个“复位”按键,一个“暂停”按键。接上电源后从00开始计时,至59后再回到00,继续循环。 系统模块结构论证 1.单片机模块选择 方案一:选用飞思卡尔单片机,飞思卡尔单片机功能强大,但是价格相对要高,而且对此不熟悉。

用数码管显示实时日历时钟的应用设计

(用数码管显示实时日历时钟的应用设计)

摘要 本课题通过MCS-51单片机来设计电子时钟,采用汇编语言进行编程,可以实现以下一些功能:小时,分,秒和年,月,日的显示。本次设计的电子时钟系统由时钟电路,LED显示电路三部分组成。51单片机通过软件编程,在LED数码管上实现小时,分,秒和年,月,日的显示;利用时钟芯片DS1302来实现计时。本文详细介绍了DS1302 芯片的基本工作原理及其软件设计过程,运用PROTEUS软件进行电路连接和仿真,同时还介绍了74LS164,通过它来实现I|O口的扩展。 关键词:时钟芯片,仿真软件,74LS164 目录 前言 0.1设计思路 (8) 0.2研究意义 (8)

一、时钟芯片 1.1 了解时钟芯片……………………………………………….8-9 1.2 掌握时钟芯片的工作原理………………………………….10-11二、74LS164 2.1 了解74LS164........................................................11-12 2.2 掌握的74LS164工作原理. (12) 三、数码管 3.1 熟悉常用的LED数码管...........................................12-13 3.2 了解动态显示与静态显示. (13) 四、程序设计 4.0 程序流程图 (14) 4.1 DS1392的驱动.......................................................15-16 4.2 PROTUES实现电路连接. (17) 4.3 数码管的显示:小时;分;秒 (18) 4.4 数码管显示:年;月;日 (19) 五、总结…………………………………………………………………..20-21 六、附页程序………………………………………………………………22-31前言

8位数码管显示时钟

本人依据AT89C51和8位数码管为素材,以最少的见实现最多的功能! 本程序开机流动显示学号可实现时钟,日历,定时闹钟,秒表等功能! C程序: #include unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //用一维数组定义-9、横杠、全灭 unsigned char num[12]={2,0,0,9,3,5,0,7,0,1,2,0} ; unsigned char a[8]; unsigned char second=0,minute=0,hour=0,year=0,mon=1,day=1,day1,hsec,sec_m,min_m,N,temp1; unsigned char minute1=0,hour1=0; unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //扫描 unsigned char k=0; unsigned int temp; // 记录毫秒为秒的变量 unsigned char M,S_flag; //M是模式,更新时间的种模式加上正常模式 S_flag闪烁标志 sbit K0=P3^7; //K0是闹钟起停标志位 sbit K1=P3^0; sbit K2=P3^1; sbit K3=P3^2; sbit BEEP=P3^3; void delay(unsigned n) //0.2毫秒 { int x,y; for(x=0;x

2位数码管显示00-99的89c51单片机电子秒表设计 的程序和电路图

/*应该是2位数码管显示00-99的89c51单片机电子秒表设计的程序和电路图*/ P0段选,P2.0个位位选,P2.1十位位选。共阳数码管16M晶振。STRT EQU P2.5 STP EQU P2.6 CLRR EQU P2.7 ORG 00H AJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN: MOV R0,#20 MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV DPTR,#TABLE SETB EA SETB ET0 k1: LCALL DISP JB STRT,K2 LCALL DISP JNB STRT,$-3 AJMP START k2: JB STP,K3 LCALL DISP JNB STP,STOP K3: JB CLRR,K1 LCALL DISP JNB CLRR,CLEAR AJMP K3 START: SETB TR0 AJMP K1 STOP: CLR TR0 AJMP K2

CLEAR: CLR TR0 MOV 40H,#0 AJMP K1 T0INT: MOV TH0,#3CH MOV TL0,#0B0H DJNZ R0,RTI MOV R0,#20 MOV A,40H CJNE A,#99,ADD1 MOV 40H,#00H CLR TR0 AJMP RTI ADD1: ADD A,#01H MOV 40H,A RTI: RETI DISP: MOV A,40H MOV B,#10 DIV AB ;//当前值除以10 MOV 20H,A ;//得出的商送给十位MOV 21H,B ;//得出的余数送给个位 CLR P2.0 SETB P2.1 MOV A,20H ;//十位显示 MOVC A,@A+DPTR MOV P0,A LCALL DELAY CLR P2.1 SETB P2.0 MOV A,21H ; //个位显示 MOVC A,@A+DPTR MOV P0,A RET DELAY: ;误差0us

数字电子钟电路的设计

江西航空职业技术学院毕业设计说明书(论文) 课题名称数字电子钟电路的设计 航空电子设备维修专业101332班 学生姓名学号15号 指导老师技术职称副教授 2013年3月10日

江西航空职业技术学院 毕业设计(论文)任务书 学生姓名:刘红亮班级:101332 1.毕业设计(论文)题目:数字电子钟电路的设计 2.毕业设计(论文)使用的原始资料数据及设计技术要求 1:基本概念清楚,基本原理正确; 2:电路图设计符合国家有关规范和标准; 3:按时参加指导教师辅导,按进度要求完成课程设计任务; 4:设计说明书不少于5000字; 2.毕业设计(论文)工作内容及完成时间:

1:数字电子时钟电路的背景和意义 2:数字电子钟电路的系统设计 3:数字钟原理图所需原件的作用 日期:自2012年12月30日至2013年4月6日 指导老师评语: ___________________________________________________ ___________________________________________________ ___________________________________________________ ___________________________________________________ ___________________________________________________ _____________________ 指导老师:姚卫华系主任:周延

摘要 现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。数码管显示的时间简单明了而且读数快、时间准确显示到秒。而机械式的依赖于晶体震荡器,可能会导致误差。数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。数字钟的精度、稳定度远远超过老式机械钟。在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用32768MHz的晶振产生振荡脉冲,定时器计数。在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。 关键字:数字钟晶振计数

秒表-六位数码管有效显示2

秒表-六位数码管有效显示 C51单片机

1.#include 2.#include 3.#define uchar unsigned char 1.void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255 2.void key_scan(); // 按键扫描 3.void key_to(); // 按键处理 4. 5.uchar code dis_code[11] = {0xc0,0xf9,0xa4,0xb0,0x99, //段 码表 6.// 0 1 2 3 4 对应内容 7. 0x92,0x82,0xf8,0x80,0x90,0xbf}; 8.// 5 6 7 8 9 - 9. 10.uchar data dis[8]; // dis[0]为百分之一秒值,dis[1]为十分之 一秒值 11. // dis[2],dis[5]为'-'段码的偏移量 12. // dis[3]为秒个位值,dis[4]为秒十位 值 13. // dis[6]为分个位值,dis[7]为分十位 值 14. 15.uchar data dot = 0; // 百分之一秒计数器(0.00s-0.99s) 16.uchar data sec = 0; // 秒计数器(00s-59s) 17.uchar data min = 0; // 分计数器(00m-99m) 18. 19.uchar data dis_b; // dis_b为位码选通数码管 20.uchar data dis_r; // dis_r为取段码时的偏移量 21. 22.uchar data key_t = 0; // 按键次数,初始为0 23. 24.sbit K = P1^4; // K键与P1.4相连 25. 26.void main() 27.{ 28. P2 = 0xff; // 关所有数码管 29. P1 = 0xff; // p1为准双向口,作输入时先写1 30. dis[2] = 10; // '-'在段码表中偏移量为10 31. dis[5] = 10; // '-'在段码表中偏移量为10 32. dis_b = 0x7f; // 初始选通P2.7口数码管 33. dis_r = 0; // 初始化偏移量为0 34. 35. TMOD = 0x11; // 定时/计数器0,1工作于方式1

基于51单片机100天倒计时数码管显示(共阴) (附加时分秒显示)

基于51单片机100天倒计时数码管显示 (共阴) (附加时分秒显示) #include unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char e3,f3,g3,h3,count,flag0,flag2,flag3,flag4,j,a1,a2,a3,a4,b1,b2; void delay(unsigned char i); signed int time1=100,time0=59,time3=59,time4=23; void sm(); void time2(); void hms1 (); void timej (); void timez (); sbit ks=P1^4; sbit hms=P1^5; sbit add=P1^6; sbit bat=P1^7; void sm() //100天数码管显示 { e3=time1/100; f3=time1%100/10; g3=time1%100%10; P2=0x00; P0=s[e3]; delay(2); P2=0x01; P0=s[f3]; delay(2); P2=0x02; P0=s[g3]; delay(2); a1=time4%60/10; //时显示 a2=time4%60%10; a3=time3%60/10; //分显示 a4=time3%60%10; P2=0x03; P0=s[a1]; delay(2); P2=0x04;

delay(2); P2=0x05; P0=s[a3]; delay(2); P2=0x06; P0=s[a4]; delay(2); b1=time0%60/10; 秒显示b2=time0%60%10; P2=0x07; P0=s[b1]; delay(2); P2=0x08; P0=s[b2]; delay(2); } void main() { TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; while(1) { sm(); time2(); hms1(); timej(); timez(); } } void time2() //计时开始{ if(ks==0) {delay(10);} if(ks==0) {flag0=1;} if(flag0==1&&ks==1)

基于数码管的电子时钟设计

2012~ 2013 学年第2 学期 《单片机原理及应用》课程设计报告 题目:基于数码管的电子时钟设计专业:自动化 班级: 电气工程系 2013年5月1日

1、任务书

摘要 随着人类科技文明的发展,人们对于时钟的要求在不断地提高。时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。 本设计主要基于单片机技术原理,设计制作出一个电子时钟系统。6位LED 数码管显示,使用按键扫描进行时间校准。这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。最后将设计的时钟系统在Protues仿真软件上进行仿真验证所设计的时钟系统稳定可靠。 关键词: AT89C51单片机;电子时钟;数码管;按键扫描

基于数码管的电子时钟设计 目录 摘要...................................................................................... 错误!未定义书签。第一章绪论.............................................................................. 错误!未定义书签。 1.1 单片机的应用和特点.......................................................... 错误!未定义书签。 1.2 单片机的发展趋势....................................................... 错误!未定义书签。 1.3 电子时钟简介及其基本特点....................................... 错误!未定义书签。第二章控制系统的硬件设计.................................................... 错误!未定义书签。 2.1 总方案设计................................................................... 错误!未定义书签。 2.2 单片机芯片的选择....................................................... 错误!未定义书签。 2.2.1 AT89C51的功能概述....................................... 错误!未定义书签。 2.2.2 AT89C51引脚功能说明................................... 错误!未定义书签。 2.3 单片机系统电路设计................................................... 错误!未定义书签。 2.4 按键电路设计............................................................... 错误!未定义书签。 2.5 蜂鸣器电路设计........................................................... 错误!未定义书签。 2.6 LED数码管显示电路.................................................... 错误!未定义书签。第三章控制系统的软件设计.................................................... 错误!未定义书签。第四章系统仿真........................................................................ 错误!未定义书签。第五章总结与体会.................................................................... 错误!未定义书签。参考文献...................................................................................... 错误!未定义书签。附录.............................................................................................. 错误!未定义书签。附录二元件清单...................................................................... 错误!未定义书签。

单片机-数码管-时分秒显示

#include<> #define uchar unsigned char #define uint unsigned int uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//0~9的数码管显示 sbit dula=P2^6;//声明段选 sbit wela=P2^7;//声明位选 uchar h,m,s,num1;//定义变量 void delay(uint xms)//延时函数 { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void init()//初始化 { TMOD=0x10;// 0001 0001 定时器0的工作方式1,定时器1的工作方式1 TH1=(65536-45872)/256; TL1=(65536-45872)%256; EA=1;//开总中断 ET1=1;//开定时器1中断 TR1=1;//启动定时器1 } void main()//主函数 { init(); //初始化 while(1) //while循环 { wela=1; //打开位选 P0=0xfe; //点亮数码管 wela=0; //关闭位选 dula=1; //打开段选 P0=table[h/10];//送入数据 dula=0; // 关闭段选 delay(1); //延时5ms wela=1; //打开位选 P0=0xfd; //点亮数码管 wela=0; //关闭位选 dula=1; //打开段选 P0=table[h%10];//送入数据

秒表-六位数码管有效显示

?/************************************************************************** ?* 标题: 秒表-六位数码管有效显示(C51) ?* 作者: wentao https://www.360docs.net/doc/38646338.html, ? https://www.360docs.net/doc/38646338.html, ?* 日期: 2007.3.3 ?* 软件: Keil C51 V8.02 ?* 芯片: AT89X51 ?* 说明: 实验板实测通过,数码管为8位共阳 ?* 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途! ?**************************************************************************/? ?#include ?#include ?#define uchar unsigned char ? ?void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255 ?void key_scan(); // 按键扫描 ?void key_to(); // 按键处理 ? ?uchar code dis_code[11] = {0xc0,0xf9,0xa4,0xb0,0x99, //段码表 ?// 0 1 2 3 4 对应内容 ? 0x92,0x82,0xf8,0x80,0x90,0xbf}; ?// 5 6 7 8 9 - ? ?uchar data dis[8]; // dis[0]为百分之一秒值,dis[1]为十分之一秒值 ?// dis[2],dis[5]为'-'段码的偏移量 ?// dis[3]为秒个位值,dis[4]为秒十位值 ?// dis[6]为分个位值,dis[7]为分十位值 ? ?uchar data dot = 0; // 百分之一秒计数器(0.00s-0.99s) ?uchar data sec = 0; // 秒计数器(00s-59s) ?uchar data min = 0; // 分计数器(00m-99m) ? ?uchar data dis_b; // dis_b为位码选通数码管 ?uchar data dis_r; // dis_r为取段码时的偏移量 ? ?uchar data key_t = 0; // 按键次数,初始为0 ? ?sbit K = P1^4; // K键与P1.4相连 ? ?void main() ? { ?P2 = 0xff; // 关所有数码管 ?P1 = 0xff; // p1为准双向口,作输入时先写1

相关文档
最新文档