单片机智能秒表的制作与调试课程设计

2020-07-30来源: 51hei关键字:单片机  智能秒表  LED数码管

一、项目任务:智能秒表的设计与制作

用四位LED数码管制作带小数显示的秒表,前两位显示整数部分(秒),后两位显示小数部分(百分之一秒)。


所设计的秒表最大计时时间为99秒99。


开始时,数码管显示“00. 00”,表明从0开始计时。

1.001.jpg

本智能秒表有两种时间计时模式。(注意:模式1与模式2用同一个程序实现,即当程序下载至单片机芯片后,只需要按下相应按键,该秒表可工作在任意一种模式下)


(一)基本部分:

1、模式1:累积计时模式

(1)按按键1可实现秒表开始、停止、再开始、再停止计时(时间累计);

(2)计时完毕,按按键2计时归零。


2、模式2:间隔计时模式

(1) 按按键1开始计时;

(2) 按按键2一次暂停秒表并显示当前时间。间隔时间显示2秒后秒表将持续计时。(例如在3秒钟时秒表被暂停,2秒钟后秒表从5秒开始继续计时。显示2秒是为了方便记录当前时间);

(3) 在下一点终止时再按按键2记录此时相关信息,如此重复;

(4) 当计时停止时按按键1;

(5)可通过按键3查看前面操作所记录的时间,最多可查看10个记录;

(6) 计时完毕,按按键2键计时归零。


(二)发挥部分

(1)用电脑时间校准秒表的时间,保证秒表走时的准确性(100秒的误差小于0.1秒),思考如何修改程序?

(2)利用内部E2PROM存储器(STC89C52自带),使智能秒表具有掉电数据不丢失的功能,思考如何修改程序?

(3)仿真无误后,购买元件制作该智能秒表,从商业价值考虑该智能秒表的美观性和实用性。


二、硬件电路及仿真效果图

1.002.jpg

三、STC90C52RC单片机引脚排列图

1.003.jpg 1.004.jpg

四、四位共阴极数码管引脚排列图

1.005.jpg 1.006.jpg

1.007.jpg

五、元器件清单

序号

元件名称

规格型号

数量

单价

合计

1

单片机

STC90C52RC

1

6

6

2

四位共阴数码管

3641AS

1

2

2

3

轻触按键

45*45mm

6

0.2

1.2

4

晶振

12MHz

1

0.5

0.5

5

瓷片电容

20pF

2

0.1

0.2

6

电解电容

10uF/10V

1

0.3

0.3

7

电阻

10KΩ

1

0.1

0.1

8

排电阻

1KΩ

1

0.5

0.5

9

单片机插座

40PIN

1

0.5

0.5

10

电路板

7cm×9cm

1

3

3

11

电池

+5V

1

3

3

12

外部存储器

AT24C04

1

2

2

共计



18


19.30元

七、调试方法和步骤

1、通电前先用万用表欧姆档(1KΩ档)测量电源两端正反向电阻,正向电阻约80KΩ,反向电阻约6.5KΩ。如果电阻很小,则说明有短路性故障,不能通电,排除短路故障后才能通电,如果电阻为无穷大,则有开路性故障。


2、通电后,测量单片机40脚与20脚之间的电压应该有5V左右,如果电压不正常,则说明单片机供电不正常,应重点检查单片机供电电路。


3、测量单片机晶振引脚18和19脚电压,应该在1.9~2.3V左右,两个引脚电压相差0.2V左右,如果这两个引脚电压不正常,说明晶振电路没有起振,重点检查晶振和补偿电容是否焊接好。


4、测量单片机复位引脚9脚,正常工作时电压为0V,按复位键时为5V,松开手后由5V逐渐降至0V。如果该脚电压不正常,说明复位电路有故障,需要检查该脚的电阻、电容的连接和焊接是否正确。


5、以上步骤的测量如果正常,则多数是单片机的软件问题,可以通过编写几个小程序单独调试I/O口、按键、数码管和存储器的功能,测试到底是软件问题还是硬件问题。


六、C语言程序

/********************************/

/* 智能秒表(使用内部EEPROM)*/

/*--------------------------------------------*/

/**(1)启动/停止功能         **/

/**(2)复位/间隔功能          **/

/**(3)两种工作模式           **/

/**(4)查看数据功能           **/

/**(5)断电记忆功能           **/

/********************************/

#include

#include

#define uint unsigned int

#define uchar unsigned char


#define RdCommand 0x01                             //定义内部EEPROM存储器部分

#define PrgCommand 0x02

#define EraseCommand 0x03

#define Error 1

#define Ok 0

#define WaitTime 0x01

sfr ISP_DATA=0xe2;

sfr ISP_ADDRH=0xe3;

sfr ISP_ADDRL=0xe4;

sfr ISP_CMD=0xe5;

sfr ISP_TRIG=0xe6;

sfr ISP_CONTR=0xe7;


sbit key1=P2^0;                //定义"启动/暂停"按钮

sbit key2=P2^1;                //定义"复位"按钮

sbit key3=P2^2;                                                        //定义"模式"按钮

sbit key4=P2^3;                                                        //定义"查看"按钮

sbit key5=P1^5;                                                        //定义"清除"按钮


sbit wei1=P2^4;                                                        //定义位选

sbit wei2=P2^5;

sbit wei3=P2^6;              

sbit wei4=P2^7;


bit flag_start,flag_mode,flag_2sec,flag_CLR;

uchar temp,temp1,aa,aa1,shi,ge,shifen,baifen,num,i=0;

uchar time_data1[11],time_data2[11];

uchar code table[]={                              //共阴极数码管编码

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x40};      


void display(uchar shi,uchar ge,uchar shifen,uchar baifen);  //声明显示子函数

void delay(uint z);           //声明延时子函数

void init();                  //声明初始化函数

void key();                                                          //声明键扫描函数

void display_process();                              //声明显示处理函数

void delayus();                                            //声明延时微秒函数                                          

void data_read();                                            //声明内部EEPROM数据读出函数

void clear();                                                          //声明清除EEPROM数据函数


void ISP_IAP_enable(void);                //声明EEPROM操作函数

void ISP_IAP_disable(void);

void ISPgoon(void);

uchar byte_read(uint byte_addr);

void SectorErase(uint sector_addr);

void byte_write(uint byte_addr, uchar original_data);

void memory_read();                                            //声明EEPROM读函数

void memory_write();                                   //声明EEPROM写函数


void main()                                                                        //主函数

{            

              init();                                //调用初始化子程序

              while(1)

              {                           

                key();                                                                                       //调用按键扫描函数

                if(num==0&&i!=0)                                             //如果一开机就按查看键

                  memory_read();                                             //调用EEPROM数据读出函数

if(flag_CLR==1)

[1] [2] [3] [4]
关键字:单片机  智能秒表  LED数码管 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic504833.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机设计的防止幼儿误锁车内报警系统
下一篇:单片机电子秒表时钟 数码管显示

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR第11课:如何对待我们的单片机
大家学习MCS51单片机和AVR单片机,又或者是PIC单片机,又或者是MSP430单片机之后,是否感觉自己可以成为一名工程师了呢?我在这里来说说我的看法吧。我们学习这些单片机的时候,先学习了理论知识,这个一般是书本上的理论知识,比如介绍单片机的发展、单片机的应用领域、单片机的原理等等。然后呢找一块开发板,对着视频教程学习,边看视屏边做实验,学习完之后呢,去做那么一两个小项目,比如“基于LabView和PWM的霍尔测速和控速的直流电机系统”,这个项目呢,相对来说综合要求能力比较高,如果一个人能够坐下来的话,你的能力就算不错了,相当不错了。从设计电路图、焊接电路板、写程序、调试等等下来,会有很大的提高。如果仅仅做了实验,我可以告诉
发表于 2020-07-25
AVR单片机控制发光二极管
点亮ARV单片机开发板上的一个LED灯原理图: 分析:上面的截图就是单片机和LED灯的连接原理图,其中J6是一个排阻,起到限流的作用,防止LED电流过大而烧坏。排阻的内部就是一组并联的电阻:bubuko.com,布布扣提示:算一下这个排阻的电阻的大小,二极管的工作电流是3mA,工作电压时1.7V,VCC的电压时5V。所以电阻上的电流是3mA,电压是3.3V,所以电阻的阻值是1.1KΩ。因为所有的二极管都是通过一个限流电阻共阳极的,所以只需要在Q端给一个低电平就能点亮这个发光二极管。Q端的电平通过一个573锁存器受控于D端的电平高低,也就是单片机的PB端口。这样我们就能通过写程序控制PB端口的高低电平来实现二极管的亮灭
发表于 2020-07-25
AVR<font color='red'>单片机</font>控制发光二极管
基于IAR环境下STM32F103单片机读取BME280程序
自己编写的基于IAR环境下STM32F103单片机读取BME280程序,没有太多的寄存器操作,简单易懂,可以直接调用,上电后只要对IO口初始化,调用函数Bme_ReadDigValue()读取校准寄存器参数并保存,再调用函数Bme_Init()初始化之后就可以用函数Bme_ReadStatus()读取传感器状态判断是否读取数据了,也可不判断传感器状态直接读取数据,读取数据直接调用函数ReadBme280()。单片机源程序:void ReadBme280(){        u32 value_ad;        double var1; 
发表于 2020-07-25
MSP430单片机定时器TA中断 程序
程序1#include  <msp430x41x.h>void main(void){  WDTCTL = WDTPW + WDTHOLD;                       // 停止看门狗  FLL_CTL0 |= XCAP18PF;                         // 配置晶振负载电容  P1DIR |
发表于 2020-07-25
第三章 硬件基础知识学习
通过上一课的学习,我们貌似成功的点亮了一个LED小灯,但是还有一些知识大家还没有彻底明白。单片机是根据硬件电路图的设计来写代码的,所以我们不仅仅要学习编程知识,还有硬件知识,也要进一步的学习,这节课我们就要来穿插介绍电路硬件知识。3.1 电磁干扰EMI第一个知识点,去耦电容的应用,那首先要介绍一下去耦电容的应用背景,这个背景就是电磁干扰,也就是传说中的EMI。1、冬天的时候,尤其是空气比较干燥的内陆城市,很多朋友都有这样的经历,手触碰到电脑外壳、铁柜子等物品的时候会被电击,实际上这就是“静电放电”现象,也称之为ESD。2、不知道有没有同学有这样的经历,早期我们使用电钻这种电机设备,并且同时在听收音机或者看电视
发表于 2020-07-25
第三章 硬件基础知识学习
第五章 定时器和数码管
通过上节课的实验,大家会发现,我们逐渐进入比较实质性的学习了,需要记住的内容也更多了,个别地方可能会感觉吃力。但是大家不要担心,要有信心。这个跟小孩学走路一样,刚开始走路不太稳,没关系,多走几步多练练。看视频的时候要注意专心,一遍看不懂,思考一下,再回头看第二遍和第三遍,没准一下就明白了。如果三遍还看不明白,那就把不懂的问题放一放,继续往下学两课再回头看一次,也可以到QQ群里或单片机论坛http://www.51hei.com/bbs/ 里多咨询一下其他的同学,讨论一下,可能就会茅塞顿开。1.1 基本数字逻辑门电路不管是数字电路,还是C语言,我们都会经常遇到逻辑运算和逻辑电路,在这里我介绍一下,大家先简单了解
发表于 2020-07-25
第五章 定时器和数码管
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved