51单片机秒表程序 00-99秒
51单片机数码管0到99循环程序代码
51单片机数码管0到99循环程序代码1. 概述在嵌入式系统的开发中,数码管是一种常见的输出设备,可以用于显示数字、字符等信息。
而51单片机是一种广泛应用的微控制器,其结合了强大的功能和灵活的应用,能够很好地驱动数码管。
本文将介绍如何使用51单片机编写一个循环显示0到99的程序,通过数码管输出这些数字。
2. 电路连接我们需要连接51单片机和数码管。
通常我们使用的是共阴数码管,其连接方式如下:- VCC连接到5V电源- GND连接到GND- DIO(数据输入/输出)连接到51单片机的IO口3. 程序设计下面是一个简单的C语言程序设计,用于控制数码管显示0到99的数字。
```c#include <reg51.h>sbit DIO = P2^0; // 数码管数据输入/输出sbit CL = P2^1; // 数码管片选信号unsigned char code numCode[10] = { 0xc0, // 00xf9, // 10xa4, // 20xb0, // 30x99, // 40x92, // 50x82, // 60xf8, // 70x80, // 80x90 // 9};//延时函数void delay(unsigned int i) {unsigned int j,k;for (j=i;j>0;j--)for(k=110;k>0;k--);}void display(unsigned char num) { CL = 1; //关闭片选DIO = numCode[num / 10]; //十位 delay(2);CL = 0;DIO = 0xff; //消隐delay(2);CL = 1; //关闭片选DIO = numCode[num 10]; //个位 delay(2);CL = 0;DIO = 0xff; //消隐delay(2);}void m本人n() {unsigned char i,j;while(1) {for(i=0;i<10;i++) {for(j=0;j<10;j++) {display(i * 10 + j);}}}}```4. 程序说明- 首先定义了数码管的连接引脚,以及0~9的显示编码。
C51单片机秒表计时(C语言)
南开大学滨海学院C51嵌入式软件设计(C语言)题目:计时秒表●功能描述:本设计实现在99秒内的秒表计时,一个按键实现开始、暂停、复位。
●原理概述:P1接四位七段数码管,P3。
2接一按键产生外部中断0,P3。
4-P3。
7控制扫描显示。
计时使用定时器0产生10ms中断累计。
按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零.主程序调用显示程序,显示程序实时显示计时时间.●效果显示●图一(电路总图)●图二(效果显示)注:第四位显示为单位:S●程序清单#include<reg51。
h>#include〈stdio.h>unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };sbit P37=P3^7;sbit P36=P3^6;sbit P35=P3^5;sbit P34=P3^4;unsigned int a=0,cout=0,mm=0;x,y,p,q;/*********延时*********************/void delay(){int g;for(g=70;g>0;g—-);}/*********显示程序*****************/void display(){x=cout/10;//秒十位P34=0;P1=Tab[x];delay();P34=1;y=cout—x*10; //秒各位P35=0;P1=Tab[y]; delay();P1=0x80;delay();P35=1;p=mm/10; //ms的高位P36=0;P1=Tab[p];delay();P36=1;P37=0; //显示单位:SP1=Tab[5]; delay();P37=1;}/*********主程序********************/ void main(){IT0=1;EX0=1;ET0=1;TMOD=0x01;TH0=0xD8;//装初值,10msTL0=0xF0;EA=1;while(1){display(); };}/*********外部按键中断子程序*********/ void int0 ()interrupt 0{if(a==0)//开始计时{ TR0=1;mm=0;a++;}else if(a==1)//暂停计时{TR0=0;a++;}else//置零{ a=0;mm=0;cout=0;}}/*********定时器子程序****************/ void time0()interrupt 1{TH0=0xD8;TL0=0xF0;mm++;if(mm==80)//考虑其它损耗,调整后约为1S {cout++;mm=0;}}。
51单片机 秒表程序
}
void ISR_INT0(void) interrupt 0 using 1
{
TR0=!TR0; //利用外部中断打开和关闭定时器0 用于开始和停止计时
}
void ISR_INT1(void) interrupt 2 using 1
{
if(TR0==0)//停止时才可以清零
CLR();
}
void CLR(void)
{
second=0; //利用外部中断清零
msecond=0;
Dis_Shiwei=tab[msecond/10];//十位显示值处理
Dis_Gewei=tab[msecond%10]; //个位显示处理
//共阴数码管 0-9
unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
unsigned char S_Dis_Shiwei;//定义秒十位
unsigned char S_Dis_Gewei; //定义秒个位
unsigned char second,msecond;
void CLR(void);
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
EX0=1;//外部中断0设置(打开外部中断0)
IT0=1;
EX1=1;//外部中断1设置
/*
1、清零
2、硬件要求:数码管、晶振12M
*/
(完整版)基于51单片机的秒表设计1
实训报告题目秒表系统的设计年级专业班级学号姓名地点日期目录一,目⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 3 二,系硬件⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4 三,系件⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯7 四,系与果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯12 五,片机小⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯13设计目标最近几年来跟着科学技术的发展,单片机的应用范围愈来愈广,也成为好多专业的必修课。
本文简单论述了鉴于单片机的秒表设计。
本设计的主要特色是计时精度达到 0.01 秒,能够用来为各样体育比赛计时等。
本设计的数字秒表采纳AT89才 51 单片机为主要器件,利用其准时器的原理,结LED数码管以及外面中止电路来设计计时器。
将软硬件联合起来,使得系统能实现 0~99.99 秒的计时,计时精度位 0.01 秒。
当按下一个键 1 时,开始显示数字,即计时开始,再按下键 2 时,暂停计时并显示方才的结果,这个时候假如再按键 1,则持续计时,也就是显示的数字包含方才的数据。
按下键 3 时,数据清零。
系统硬件设计1 、1整体方案的设计数字秒表拥有显示直观、读取方便、精度高等长处,在计时中宽泛应用。
本设计顶用单片机和数码管构成数字秒,力争构造简单。
设计中包含硬件电路的设计和系统程序的设计。
硬件电路主要有主控制器、控制按钮与显示电路构成。
主控制器采纳单片机AT89才 51,显示电路采纳四位共阴极数码管显示计不时间。
本设计利用 AT89才 51 单片机的准时器,使其能精准计时。
利用键盘上的独立按键实现开始计时和暂停以及清零。
P0口输出段码数据, P2.0~P2.2 连上译码器作为位选。
设计的基本要求是正确性。
计时器采纳 T0 中止实现,准时溢出中止周期为1ms,当溢出中止后向CPU 发出溢出中止恳求,每发出10 次中止恳求就对 10ms位(即最后一位)加一,达到 100 次就对 100ms位加一,以此类推,直到99.99s 为止。
51单片机99秒马表设计程序
实验一99秒马表设计1.实验任务开始时,显示“00”,第1次按下按键后就开始计时。
第2次按键后,计时停止。
第3次按键后,计时归零。
2.实验要求用proteus软件画出电路图在keil软件中编写、调试程序要求秒表的误差每秒钟不高于0.01S撰写好实验报告,要求至少包含以下几项:实验目的实验任务与要求实验电路程序流程图实验程序电路仿真结果分析与误差分析实验总结#include"reg52.h"#define uchar unsigned char#define uint unsigned intsbit key=P3^2;uchar code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uint num,num1;void delayms(uint n){uint i,j;for(i=n;i>0;i--)for(j=110;j>0;j--);}void display(uint num){uchar shi,ge;shi=num/10;ge=num%10;P2=0x00;P0=table[shi];delayms(5);P2=0x01;P0=table[ge];delayms(5);}void init(){TMOD=0x01;IE=0x83;TH0=(65536-45892)/256; TL0=(65536-45892)%256; IT0=0;}void main(){init();while(1){display(num);}}void I0_wai() interrupt 0 {uint num2;delayms(10);if(key==0){EX0=0;TR0=1;num2++;while(!key);}if(num2==1){TR0=1;}if(num2==2){TR0=0;}if(num2==3){TR0=1;num=0;num2=1;}EX0=1;}void T0_time() interrupt 1 {TH0=(65536-45892)/256; TL0=(65536-45892)%256; num1++;if(num1==20){num1=0;num++;if(num==100){num=0;}}}。
单片机0-99计数器 秒表报告
姓名班级指导老师时间信息工程学院图1 硬件电路连接图(二)显示电路两位数码管循环显示00~99电路数码管只要就是用于数字得显示.数码管有共阴与共阳得区分,单片机都可以进行驱动,但就是驱动得方法却不同。
两位数码管循环电路就是由电阻、二极管与数码管组成,电源+5V通过560得电阻直接给数码管得7个段位供电,P0、0—P0、7对应了两个接数码管得A,B,C,D,E,F,G与小数点位,P2、6接显示个位数得数码管得3、8引角,P2、7则接十位数得。
P2、6与P2、7端口分别控制数码管得十位与个位得供电,当相应得端口变成低电平时,驱动相应得三极管会导通,+5V通过二极管与驱动三极管给数码管相应得位供电,这时只要P0口送出数字得显示代码,数码管就能正常显示需要得数字。
图2 十位显示动态数码管(共阳数码管)图3 个位显示静态数码管(共阴数码管)(三)时钟电路时钟电路得晶振频率越高,系统得时钟频率越高,单片机得运行速度也越快。
晶振频率根据设计需要设为12MHz,又根据谐振性质,电路中得电容应选择为30pF左右。
图4 时钟电路(四)复位电路MCS—51单片机得复位就是靠外部电路实现得。
MCS—51单片机工作之后,只要在她得RST引线上加载10ms以上得高点平,单片机就能有效地复位。
MCS-51单片机通常采用上电自动复位与按键复位两种方式。
最简单得复位电路如图5:图5 复位电路上电瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上得高电平,就能使单if(i++==100)//如果i=0{i=0;count++;P0=CODE[count/10];P2=~CODE[count%10];if(count==99)count=0; //如果到了99,则重新从0开始计数}}结果与分析(可以加页):(一)调试结果1.初始状态图7:初始状态结果图2.开始计时后按下按键暂停图8:中间状态图示(二)问题分析及解决措施1、一开始时没有分清楚数码管就是共阴数码管还就是共阳数码管,C语言程序中默认数码管就是共阴,所以两个P接口得值都就是按照共阴去写得,导致数码管选段及位显有问题,后来经过老师得指点,将共阳数码管P2得接口改成了共阴。
基于51单片机的秒表设计
单片机课程设计课程题目:基于51单片机的秒表设计专业:电子信息工程班级:电信121学号:姓名:1 课题内容要求及目的1.1课题内容用AT89C51设计一个秒表,该秒表课可显示0.0~99.9秒的时间,进行相应的单片机硬件电路的设计并进行软件编程利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。
综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握。
本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。
模拟利用AT89C51单片机、LED 数码管以及控件来控制秒表的计数以及计位!其中有三位数码管用来显示数据,显示秒(两位)和十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。
计秒数码管采用三位的数码管,当计数超过范围是所有数码管全部清零重新计数。
1.2课题要求本课题是基于单片机的秒表系统设计,它的具体要求有以下几点:(1)用单片机AT89C51实现;(2)以0.1秒为最小单位进行显示;(3)秒表量程为0.0-99.9秒,用LED显示;(4)有清零、开始、停止功能。
1.3课题目的通过课程设计,进一步熟悉和掌握AT89C51单片机的结构及工作原理,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。
通过完成一个包括电路设计和程序开发的完整过程,进一步了解开发一单片机应用系统的全过程,通过此综合训练,为以后毕业设计打下一定的基础。
(1)利用单片机定时器计数器中断设计秒表,从而实现秒、十分之一秒的计时。
(2)综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力,加深对单片机课程的全面认识。
单片机控制秒表显示时间为00—99(每秒自动加1),暂停,复位
标准文档9创新实践实训报告学院信息电子技术学院专业电子信息工程班级14学籍号姓名指导教师蒋野2017年06月29日单片机控制秒表电路一、电路工作原理1.工作原理用STC89C52设计一个2位的LED数码显示作为“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“暂停”键S2和一个“继续”键S3。
为使本设计系统更加完善,可以引入一个“复位”键S1,以方便对系统的控制。
如图。
本系统采用STC89C51单片机为中心器件,利用其定时器/计数器定时计数的原理,结合硬件电路如电源电路,晶振电路,复位电路和显示电路,以及一些按键电路等来设计计数器,将软硬件有机结合起来,其中软件系统采用汇编语言编写程序,包括显示程序,计数程序,中断,硬件系统利用Protues强大的功能来实现,简单易于观察,在仿真中就可以观察到实际的工作状态。
2.元器件作用(1)STC89C52单片机在电子行业中有着广泛的应用。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,STC89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。
(2)时钟电路作用是为电路提供唯一的时钟信号。
(3)复位电路外接一个开关,控制电路复位,接通电源电路直接复位,如果没有开关亦可将复位电路引出导线接电源后断开。
(4)本设计要求使用共阳极的数码管,如下是共阳极的数码管的0-9编码:0xc0,0x92,0x82,0xf8,0x80,0x90,0xf9,0xa4,0xb0,0x99.(5)控制电路:S2按下电路停止计时,S3按下电路恢复计时。
二、程序流程图主程序流程图三、检测安装与调试1.元件检测共阳极数码管检测管脚序号利用万用表二极管档红表笔接一个抵住两个管脚,利用另一个接触其他,找出1,2两个管脚,继续分别找出A,D,C,D,E,F,G,Dp管脚。
51单片机秒表程序设计
51单片机秒表程序设计1. 简介秒表是一种用于测量时间间隔的计时器,常见于体育比赛、实验室实验等场合。
本文将介绍如何使用51单片机设计一个简单的秒表程序。
2. 硬件准备•51单片机开发板•LCD液晶显示屏•按键开关•连接线3. 程序流程3.1 初始化设置1.设置LCD液晶显示屏为8位数据总线模式。
2.初始化LCD液晶显示屏。
3.设置按键开关为输入模式。
3.2 主程序循环1.显示初始界面,包括“00:00:00”表示计时器初始值。
2.等待用户按下开始/暂停按钮。
3.如果用户按下开始按钮,则开始计时,进入计时状态。
4.如果用户按下暂停按钮,则暂停计时,进入暂停状态。
5.在计时状态下,每隔1毫秒更新计时器的数值,并在LCD液晶显示屏上显示出来。
6.在暂停状态下,不更新计时器的数值,并保持显示当前数值。
3.3 计时器控制1.定义一个变量time用于存储当前的计时器数值,单位为毫秒。
2.定义一个变量running用于标记计时器的状态,0表示暂停,1表示运行。
3.定义一个变量start_time用于存储计时器开始的时间点。
4.定义一个变量pause_time用于存储计时器暂停的时间点。
5.在计时状态下,每隔1毫秒更新time的值为当前时间与start_time的差值,并将其转换为小时、分钟、秒的表示形式。
6.在暂停状态下,保持time的值不变。
3.4 按键检测1.检测按键开关是否被按下。
2.如果按键被按下,判断是开始/暂停按钮还是复位按钮。
3.如果是开始/暂停按钮,并且当前处于计时状态,则将计时状态设置为暂停状态,并记录暂停时间点为pause_time;如果当前处于暂停状态,则将计时状态设置为运行状态,并记录开始时间点为当前时间减去暂停时间的差值。
4.如果是复位按钮,则将计时器数值重置为0,并将计时状态设置为暂停。
4. 程序代码示例#include <reg51.h>// 定义LCD控制端口和数据端口sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_EN = P1^2;sbit LCD_D4 = P1^3;sbit LCD_D5 = P1^4;sbit LCD_D6 = P1^5;sbit LCD_D7 = P1^6;// 定义按键开关端口sbit START_PAUSE_BTN = P2^0;sbit RESET_BTN = P2^1;// 定义全局变量unsigned int time = 0; // 计时器数值,单位为毫秒bit running = 0; // 计时器状态,0表示暂停,1表示运行unsigned long start_time = 0; // 开始时间点unsigned long pause_time = 0; // 暂停时间点// 函数声明void delay(unsigned int ms);void lcd_init();void lcd_command(unsigned char cmd);void lcd_data(unsigned char dat);void lcd_string(unsigned char *str);void lcd_clear();void lcd_gotoxy(unsigned char x, unsigned char y);// 主函数void main() {// 初始化设置lcd_init();while (1) {// 显示初始界面lcd_clear();lcd_gotoxy(0, 0);lcd_string("00:00:00");// 等待用户按下开始/暂停按钮while (!START_PAUSE_BTN && !RESET_BTN);// 判断按钮类型并处理计时器状态if (START_PAUSE_BTN) {if (running) { // 当前处于计时状态,按下按钮将进入暂停状态 running = 0;pause_time = time;} else { // 当前处于暂停状态,按下按钮将进入计时状态running = 1;start_time = get_current_time() - pause_time;}} else if (RESET_BTN) { // 复位按钮按下,重置计时器time = 0;running = 0;}}}// 毫秒级延时函数void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--) {for (j = 110; j > 0; j--);}}// LCD初始化函数void lcd_init() {lcd_command(0x38); // 设置8位数据总线模式lcd_command(0x0C); // 显示开,光标关闭lcd_command(0x06); // 光标右移,不移动显示器lcd_command(0x01); // 清屏}// 向LCD发送指令函数void lcd_command(unsigned char cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;LCD_D4 = cmd >> 4 & 1;LCD_D5 = cmd >> 5 & 1;LCD_D6 = cmd >> 6 & 1;LCD_D7 = cmd >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = cmd >> 0 & 1;LCD_D5 = cmd >> 1 & 1;LCD_D6 = cmd >> 2 & 1;LCD_D7 = cmd >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送数据函数void lcd_data(unsigned char dat) { LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;LCD_D4 = dat >> 4 & 1;LCD_D5 = dat >> 5 & 1;LCD_D6 = dat >> 6 & 1;LCD_D7 = dat >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = dat >> 0 & 1;LCD_D5 = dat >> 1 & 1;LCD_D6 = dat >> 2 & 1;LCD_D7 = dat >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送字符串函数void lcd_string(unsigned char *str) {while (*str) {lcd_data(*str++);delay(5);}}// 清屏函数void lcd_clear() {lcd_command(0x01);}// 设置光标位置函数void lcd_gotoxy(unsigned char x, unsigned char y) {unsigned char addr;if (y == 0)addr = x | (0x80 + y);else if (y == 1)addr = x | (0xC0 + y);lcd_command(addr);}5. 总结本文介绍了使用51单片机设计一个简单的秒表程序。
基于51单片机的时钟秒表
摘要 (1)1 设计目的及要求 (2)1.1 设计目的 (2)1.2 设计要求 (2)2 设计方案选择 (3)2.1 芯片简介 (3)2.2 总体设计思路 (3)2.3 单元电路设计 (4)2.3.1 时钟模块 (4)2.3.2 复位电路模块 (4)2.3.3 控制模块 (5)2.3.4 显示模块 (5)3 软件设计 (6)3.1整体程序设计思路 (6)3.2 程序流图 (6)3.3 主要程序代码 (8)4 仿真调试 (11)4.1 keil简介 (12)4.1 keil与protues联调 (11)4.2仿真实现 (12)5 硬件实现 (13)5.1 程序下载步骤 (13)5.1 硬件调试 (14)6 拓展 (14)6.1 设计原理 (14)6.2 主要程序清单 (14)6.3 仿真实现 (15)7 心得体会 (16)参考文献 (17)本设计的数字秒表系统采用STC89C52单片机为中心器件,利用其定时器/计数器原理,结合LED数码管以及按键电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现四位LED显示,显示时间为00.00~99.99秒,计时精度为0.01秒,能正确地进行计时。
同时,我在此基础上,又设计了时钟秒表定时器,可以显示年、月、日、星期、时间进制、时、分、秒、、以及闹钟启/停状态,可以实现时间的调整,时钟/秒表功能的转换,闹钟的启/停。
其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,延时程序等,并在keil中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态,利用单片机开发板可下载程序,实现硬件实现。
关键词:秒表,时钟,定时/计数器1 设计目的及要求1.1 设计目的本设计主要是应用Proteus软件和嵌入式C语言编程工具,结合单片机原理及应用、微机原理与接口技术等专业课程,强化和巩固专业理论基础,掌握Proteus仿真的技巧和嵌入式C语言编程工具,提高单片机开发能力,并为嵌入式开发打下基础。
利用51单片机制作一个秒表的详细过程
利用51单片机制作一个秒表的详细过程利用51单片机制作一个秒表的详细过程前面的话:和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家一样,百思不得其解,最后头都弄大了才把这个秒表制作出来,为了给以后的朋友们一些思路,一些参考,所以在这里我把自己制作的整个详细过程整理出来供大家参考。
我调试出来是没有问题的,各方面都稳定运行,由于我水平有限,中间可能会有不对的地方,欢迎大家指正,我们一起学习,一起进步!我将分为三个部分来介绍:1.整体思路,2.硬件电路方面,3.软件编程方面。
1.整体思路利用51单片机制作秒表时,我介绍精确到十分位(即0.1s)的制作,并让其拥有启动,暂停,复位三个功能。
用到的单片机部分:定时器部分,独立按键的检测与应用,数码管的显示,并结合一些简单的程序即可实现。
用5位数码管来进行显示,分别显示秒的十分位,秒的个位,秒的十位,分的个位,分的十位。
用定时器定时50ms,2个定时器中断即是0.1s,即秒的十分位,20个定时器中断即是1s,60个1s即是1分钟,通过程序将5位数码管的值分离出来,并进行显示。
这就是我在数码管显示方面的思路,如果不是太清楚,结合我下面软件编程方面的程序来看你可能就会明白,我会在那部分做详细介绍,看完了可能你就懂了。
利用独立按键设置启动/暂停键和清零键,利用独立按键的检测,若启动/暂停按键按下,秒表则启动或者暂停,按下复位键,秒表清零复位。
我在程序后面全都有注释,不用担心。
看完你就会明白了。
这是我制作的的流程图:“ms100”表示秒的十分位,'s'表示秒的个位,“s1”表示秒的十位,“min”表示分的个位,“min1”表示分的十位。
“cnt”表示秒的计数位,即多少个一秒,定时满一秒加1,“minu”表示分的计数位,即多少个一分钟,一分钟加1,这个流程图提供了大致思路,要结合下面的程序部分一起看。
51单片机-秒表C程序
}
void init() //初始化函数
{
TMOD=0x01;//设置定时器0为工作方式1(0000 0001)
TH0=(65536-9174)/256;//装初值50ms一次中断
TL0=(65536-9174)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
}
void keyscan()
{
if(key1==0)
{
delayms(5);
if(key1==0)
{
while(!key1);
TR0=~TR0;//启动或停止定时器0
}
}
if(key2==0)
{
delayms(5);
if(key2==0)
{
numt1=0;
num=0; //清0
numf=0;
TR0=0;
gao1=0;
delayms(5);//延时
P0=0xff;
gao1=0;
gao1=1;
shi1=numdis3/10;
shi0=numdis3%10;
P0=table[shi0];
dula=1; //送十位段选数据
dula=0;//原来段选数据通过位选锁存器造成混乱
gao2=0;
delayms(5);//延时
dula=0;//原来段选数据通过位选锁存器造成混乱
P0=0xfb;
wela=1;//送位选数据
wela=0;
delayms(5);//延时
P0=0xff;
wela=1;//消影
wela=0;
miao1=numdis1/10;
51单片机秒表程序设计
51单片机秒表程序设计51单片机秒表程序设计班级:姓名:学号指导老师时间一、课题任务要求用*****设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。
即数码显示管在原先的计数上快速加一。
二、设计思路1、使用单片机,设计秒表,能显示分分秒秒;2、使用三个按键停止,开始,复位,其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时;3、使用液晶或数码管显示;4、使用定时器中断;三、硬件设计1、单片机介绍单片机:*****是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS 8位微处理器。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
*****主要特性:与MCS-51 兼容低功耗的闲置和掉电模式4K字节可编程闪烁存储器全静态工作:0Hz-24MHz 寿命:1000写/擦循环数据保留时间:10年三级程序存储器锁定128×8位内部RAM 片内振荡器和时钟电路32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道管脚说明:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
单片机控制秒表显示时间为00—99(每秒自动加1),暂停,复位
(4)复查电路:重新检测电路,利用万用表电流档,检测电路电流,发现电路无电流,检查40引脚VCC,发现单片机40引脚与插座短路,接触不良导致,陆续检查其他引脚。发现还有部分引脚短路。
(5)继续检查电路,直至数码管显示数字为止。
结果显示,秒表运行正常。按照预期实现了99s计时、暂停以及继续的功能。
附件
1.利用单片机完成一定的任务,你的创意(创新)是什么?
我的创意就是电路的布局,实验操作起来与仿真不同,需要注意很多细节,例如原件检测。我的电路布局既节省空间,又不影响电路结构。
2.程序
#include<reg52.h>
sbit W=P1^4;
sbit H=P1^6;
unsigned char msec,sec;
void delay(unsigned char i)
{
unsigned int j,k;
for(k=0;k<i;k++)
for(j=0;j<255;j++);
}
void To_INT(void) interrupt 1
2.元器件作用
(1)STC89C52单片机在电子行业中有着广泛的应用。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,STC89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。
9
创新实践实训报告
学院
信息电子技术学院
专业
电子信息工程
51单片机秒表程序-00-99秒
#include <reg52.h>#define uchar unsigned char //宏定义用uchar代替unsigned char#define uint unsigned intsbit START=P1^0; //开始、停止键低电平有效sbit RST=P1^1; //复位键sbit SMGGW=P1^2; //用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定sbit SMGSW=P1^3;uchar tt;uint time; //此变量为时间uchar code table[]={ //此为数码管字模,对应0--90x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};void Delay(uint ms) //延时子函数{uint i,j;for(i=ms;i>0;i--)for(j=500;j>0;j--);}void Display() //显示子函数{uchar ge,shi;shi=time/10;ge=time%10;P0=table[ge];SMGGW=0;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定本程序为低电平数码管亮SMGSW=1;Delay(2);P0=table[shi];SMGGW=1;SMGSW=0;Delay(2);}void main(){P1=0xff;EA=1;ET0=1;TMOD=0x01;TH0=0x4c; //晶振11.0592Mhz 若用12Mhz晶振则改为TH0=0x3c;Tl0=0xb0;TL0=0x00;while(1){if(START==0) //开始、停止{Delay(8);if(START==0){TR0=!TR0;while(!START) Display();}}if(RST==0) //复位{Delay(8);if(RST==0){time=0;while(!RST)Display();}}if(tt==20)tt=0;time++;if(time==99){time=0;}}Display();}}void timer0() interrupt 1{TH0=0x4c; //晶振11.0592Mhz 若用12Mhz晶振则改为TH0=0x3c;Tl0=0xb0;TL0=0x00;tt++;}Welcome To Download !!!欢迎您的下载,资料仅供参考!。
51单片机秒表程序 00-99秒
{
uint i,j;
for(i=ms;i>0;i--)
for(j=500;j>0;j--);
}
void Display() //显示子函数
{
uchar ge,shi;
shi=time/10;
ge=time%10;
P0=table[ge];
SMGGW=0;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定本程序为低电平数码管亮
sbit SMGSW=P1^3;
uchar tt;
uint time;//此变量为时间
uchar code table[]={//此为数码管字模,对应0--9
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
void Delay(uint ms)//延时子函数
#include <reg52.h>
#define uchar unsigned char //宏定义用uchar代替unsigned char
#define uint unsigned int
sbit START=P1^0; //开始、停止键低电平有效
sbit RST=P1^1; //复位键
sbit SMGGW=P1^2;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定
TL0=0x00;
TR0=0;
while(1)
{
if(START==0)//开始、停止
{
Delay(8);
if(START==0)
{
TR0=!TR0;
while(!START) Display();
单片机控制秒表显示时间为00—99-暂停-复位
单片机控制秒表显示时间为00—99(每秒自动加1)-暂停-复位(总12页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--9创新实践实训报告学院信息电子技术学院专业电子信息工程班级14学籍号姓名指导教师蒋野2017年06月29日2单片机控制秒表电路一、电路工作原理1.工作原理用STC89C52设计一个2位的LED数码显示作为“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“暂停”键S2和一个“继续”键S3。
为使本设计系统更加完善,可以引入一个“复位”键S1,以方便对系统的控制。
如图。
本系统采用STC89C51单片机为中心器件,利用其定时器/计数器定时计数的原理,结合硬件电路如电源电路,晶振电路,复位电路和显示电路,以及一些按键电路等来设计计数器,将软硬件有机结合起来,其中软件系统采用汇编语言编写程序,包括显示程序,计数程序,中断,硬件系统利用Protues强大的功能来实现,简单易于观察,在仿真中就可以观察到实际的工作状态。
2.元器件作用(1)STC89C52单片机在电子行业中有着广泛的应用。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,STC89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash 存储器可有效地降低开发成本。
(2)时钟电路作用是为电路提供唯一的时钟信号。
(3)复位电路外接一个开关,控制电路复位,接通电源电路直接复位,如果没有开关亦可将复位电路引出导线接电源后断开。
(4)本设计要求使用共阳极的数码管,如下是共阳极的数码管的0-9编码:0xc0,0x92,0x82,0xf8,0x80,0x90,0xf9,0xa4,0xb0,0x99.(5)控制电路:S2按下电路停止计时,S3按下电路恢复计时。
基于51单片机的秒表设计
单片机课程设计课程题目:基于51单片机的秒表设计专业:电子信息工程班级:电信121学号:姓名:1 课题内容要求及目的1.1课题内容用AT89C51设计一个秒表,该秒表课可显示0.0~99.9秒的时间,进行相应的单片机硬件电路的设计并进行软件编程利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。
综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握。
本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。
模拟利用AT89C51单片机、LED 数码管以及控件来控制秒表的计数以及计位!其中有三位数码管用来显示数据,显示秒(两位)和十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。
计秒数码管采用三位的数码管,当计数超过范围是所有数码管全部清零重新计数。
1.2课题要求本课题是基于单片机的秒表系统设计,它的具体要求有以下几点:(1)用单片机AT89C51实现;(2)以0.1秒为最小单位进行显示;(3)秒表量程为0.0-99.9秒,用 LED显示;(4)有清零、开始、停止功能。
1.3课题目的通过课程设计,进一步熟悉和掌握AT89C51单片机的结构及工作原理,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。
通过完成一个包括电路设计和程序开发的完整过程,进一步了解开发一单片机应用系统的全过程,通过此综合训练,为以后毕业设计打下一定的基础。
(1)利用单片机定时器计数器中断设计秒表,从而实现秒、十分之一秒的计时。
(2)综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力,加深对单片机课程的全面认识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <>
#define uchar unsigned char //宏定义用uchar代替unsigned char
#define uint unsigned int
sbit START=P1^0; //开始、停止键低电平有效
sbit RST=P1^1; //复位键
sbit SMGGW=P1^2; //用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定
sbit SMGSW=P1^3;
uchar tt;
uint time; //此变量为时间
uchar code table[]={ //此为数码管字模,对应0--9
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
void Delay(uint ms) //延时子函数
{
uint i,j;
for(i=ms;i>0;i--)
for(j=500;j>0;j--);
}
void Display() //显示子函数
{
uchar ge,shi;
shi=time/10;
ge=time%10;
P0=table[ge];
SMGGW=0;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定本程序为低电平数码管亮
SMGSW=1;
Delay(2);
P0=table[shi];
SMGGW=1;
SMGSW=0;
Delay(2);
}
void main()
{
P1=0xff;
EA=1;
ET0=1;
TMOD=0x01;
TH0=0x4c; //晶振若用12Mhz晶振则改为TH0=0x3c;Tl0=0xb0;
TL0=0x00;
TR0=0;
while(1)
{
if(START==0) //开始、停止
{
Delay(8);
if(START==0)
{
TR0=!TR0;
while(!START) Display();
}
}
if(RST==0) //复位
{
Delay(8);
if(RST==0)
{
time=0;
while(!RST)Display();
}
}
if(tt==20)
{
tt=0;
time++;
if(time==99)
{
time=0;
}
}
Display();
}
}
void timer0() interrupt 1
{
TH0=0x4c; //晶振若用12Mhz晶振则改为TH0=0x3c;Tl0=0xb0;
TL0=0x00;
tt++; }。