电子发烧友网 > 控制/MCU > 正文

51单片机对八位数字秒表的设计

2018年12月06日 16:04 次阅读

//基于51单片机的八位数字秒表

//开发语言:C51

//所选芯片:AT89S51

#include

#include

#define DIG_NONE 0xff;

#define DIG_1 0x7f

#define DIG_2 0xbf

#define DIG_3 0xdf

#define DIG_4 0xef

#define DIG_5 0xf7

#define DIG_6 0xfb

#define DIG_7 0xfd

#define DIG_8 0xfe

51单片机对八位数字秒表的设计

#define LINE 0xf7//根据共阴共阳以及接法要调整

typedef unsigned char Byte;

typedef bit bool;

sbit START = P3^0;

sbit RESET = P3^1;

Byte data dis_digit;

Byte data min;

Byte data sec;

Byte data msec;

bool data isStarted;

Byte data dis_digit;

Byte data dis_index;

Byte data dis_buff[8];

Byte data dis_num[8];

//根据共阴共阳以及数码管接法这里要的表要调整

Byte code number[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表

Byte dis_buff[8]; // 显示缓冲区

Byte dis_num[8]; // 秒计数值, BCD码

Byte dis_index;

bit Scan_Key();

void Proc_Key();

void Delayms(Byte ms);

void Update_buff();

void Msec_Increment();

void Reset(void);

bool Get_Key(bit key);//有效为1

void MCU_Init(void);

void Timer0_Overflow();

void TImer1_Overflow();

//sbit K1 = P3^2;

void Msec_Increment()//中断里面的设置

{

msec += 1;

if (msec == 100)

{

msec = 0;

sec += 1;

}

if (sec == 60)

{

sec = 0;

min += 1;

}

if (min == 60)

min = 0;

}

void MCU_Init()

{

P1 = 0xff;

P2 = 0xff;

TMOD = 0x12;

TH1 = 0xd8;

TL1 = 0xf0;

TH0 = 0x9c;

TL0 = 0x00;

////定时器1选用方式1工作,扫描周期0.01s=10ms,定时器0选用工作方式3工作,自动装入,扫描周期0.1ms=100μs

Reset();

min = 0;

sec = 0;

msec = 0;

dis_digit = 0x7f; // 初始显示P20口数码管

dis_index = 0;

IE = 0x8a; // 使能TImer0, TImer1中断

TR0 = 1;

TR1 = 0;

isStarted = 0;

}

void Reset()

{

min = 0;

sec = 0;

msec = 0;

Update_buff();

}

void Update_buff()

{

dis_num[0] = min / 10;

dis_num[1] = min % 10;

dis_num[3] = sec / 10;

dis_num[4] = sec % 10;

dis_num[6] = msec / 10;

dis_num[7] = msec % 10;

//这里根据数码管的顺序进行调整

dis_buff[0] = number[dis_num[7]];

dis_buff[1] = number[dis_num[6]];

dis_buff[2] = LINE;

dis_buff[3] = number[dis_num[4]];

dis_buff[4] = number[dis_num[3]];

dis_buff[5] = LINE;

dis_buff[6] = number[dis_num[1]];

dis_buff[7] = number[dis_num[0]];

}

bool Get_Key(bit key)//有效为1,这里按下为低电平

{

if (key == 0)

return 1;

else

return 0;

}

void TImer0() interrupt 1

{

P2 = 0xff; // 先关闭所有数码管

P1 = dis_buff[dis_index]; // 显示代码传送到P0口

P2 = dis_digit; //

dis_digit = _cror_(dis_digit,1); // 位选通值右移(P20《-P27), 下次中断时选通下一位数码管

//_cror_()为字符循环右移函数

dis_index++; //

dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描

}

void timer1() interrupt 3

{

TH1 = 0xd8;

TL1 = 0xf0;

Msec_Increment();

Update_buff();

}

void delayms(unsigned char ms)

// 延时子程序

{

unsigned char i;

while(ms--)

{

for(i = 0; i 《 120; i++);

}

}

void main(void)

{

bool startkey, resetkey;

MCU_Init();

while(1)

{

startkey = Get_Key(START);

resetkey = Get_Key(RESET);

if (startkey == 1)

{

Delayms(50);

startkey = Get_Key(START);

if (startkey == 1)

{

isStarted = !isStarted;

TR1 = !TR1;

}

}

if (resetkey == 1 && isStarted == 0)

{

Delayms(20);

resetkey = Get_Key(RESET);

if (resetkey == 1 && isStarted == 0)

{

Reset();

}

}

}

}

技术专区

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

基于单片机的智能窗系统设计(电路+流程)

发表于 2018-12-05 16:39 451次阅读
基于单片机的智能窗系统设计(电路+流程)

51单片机对LCD液晶显示器的控制

这里用到的液晶为LCD1602,能够同时显示16x02即32个字符(16列2行)。1602液晶模块内...

发表于 2018-12-05 16:04 75次阅读
51单片机对LCD液晶显示器的控制

敢问大神,LCD1602的RD端和WR端和LCDE端,分别接51单片机的io口P3.2,P3.3,P3.4,为什么不能正常显示,换个P2io口就行了

发表于 2018-12-04 22:29 237次阅读
敢问大神,LCD1602的RD端和WR端和LCDE端,分别接51单片机的io口P3.2,P3.3,P3.4,为什么不能正常显示,换个P2io口就行了

求数字秒表

发表于 2018-12-04 22:11 39次阅读
求数字秒表

智能厚度测量系统设计(测厚仪+论文+程序)

发表于 2018-12-03 23:18 45次阅读
智能厚度测量系统设计(测厚仪+论文+程序)

基于单片机 16*16点阵原理图 请大神帮忙解决一下

发表于 2018-12-02 16:22 34次阅读
基于单片机 16*16点阵原理图  请大神帮忙解决一下

51单片机学习感悟与51单片机上拉电阻心得

发表于 2018-12-01 15:06 27次阅读
51单片机学习感悟与51单片机上拉电阻心得

关于51单片机数的乘除法问题

发表于 2018-11-30 20:05 44次阅读
关于51单片机数的乘除法问题

51单片机PPM波的测试设计

先说说PPM波,从图上可以看出周期为20ms,冠丽控实际是6通控,但预留两通没有使用。通道的高电平区...

发表于 2018-11-30 15:40 72次阅读
51单片机PPM波的测试设计

普中科技51单片机实验集锦(基础级、中级、高级)

发表于 2018-11-28 15:51 325次阅读
普中科技51单片机实验集锦(基础级、中级、高级)

Proteus 51单片机与PC的串口通信调试

发表于 2018-11-27 13:57 121次阅读
Proteus 51单片机与PC的串口通信调试

单片机数字温度计

发表于 2018-11-26 20:31 85次阅读
单片机数字温度计

六款常用单片机的比较

EM78系列单片机采用高速CMOS工艺制造,低功耗设计为低功耗产品,价格较低。具有三个中断源、R-O...

发表于 2018-11-23 15:25 233次阅读
六款常用单片机的比较

51单片机的外部中断实验设计

实验结果:当杜邦线另一端接电源时,led灭;当接地时,led就亮 结论:无论配置与否,51单片...

发表于 2018-11-23 15:16 172次阅读
51单片机的外部中断实验设计

超声波模块HC-SR04电路测量原理讲解

发表于 2018-11-22 16:31 264次阅读
超声波模块HC-SR04电路测量原理讲解

51单片机的SCON寄存器与C程序解析

SCON寄存器是51单片机一个可寻址的专用寄存器,用于串行数据通信的控制,其字节地址为:98H,位地...

发表于 2018-11-22 16:15 128次阅读
51单片机的SCON寄存器与C程序解析

51单片机寄存器寻址的方法

1、4个工作寄存器组共有32个通用寄存器,但在指令中只能使用当前寄存器组(工作寄存器组的选择在前面专...

发表于 2018-11-22 15:46 93次阅读
51单片机寄存器寻址的方法

如何使用51单片机实现串口通信

51单片机的串口引脚为P3.0引脚与P3.1引脚,分别是RXD和TXD引脚。串口通信可以用于单片机和...

发表于 2018-11-21 15:47 177次阅读
如何使用51单片机实现串口通信

如何用51单片机实现IIC通信

在之前的MCS-51系列单片机中内部没有IIC通信资源,所如果要想用51单片机实现IIC通信,就只能...

发表于 2018-11-20 15:52 187次阅读
如何用51单片机实现IIC通信

51单片机的学习经验总结

单片机就是一款自动控制的芯片。注意,是芯片,你做的工作就是如何编程来是这款芯片工作,是这款芯片在规定...

发表于 2018-11-20 15:37 153次阅读
51单片机的学习经验总结

51单片机定时器模式2与波特率的应用

一般来说,我们都是采用定时器1的模式2(自动重装模式)来作为波特率发生器的,同理,定时器1的中断也就...

发表于 2018-11-19 16:12 120次阅读
51单片机定时器模式2与波特率的应用

51单片机实现通讯协议的串口通讯编程

51中一般针对串口通讯编程,通常采取中断接受查询发送的方式。中断函数在接受数据到达时被重复调用,其实...

发表于 2018-11-16 15:54 153次阅读
51单片机实现通讯协议的串口通讯编程

51单片机对LED点阵屏的设计

微控制器的IO口均不能流过过大的电流,LED点亮时有约10ms的电流,因此LED点阵引脚不要直接接单...

发表于 2018-11-15 16:52 192次阅读
51单片机对LED点阵屏的设计

基于51单片机对两路DS18B20温度传感器的设...

目前,温度控制器存在的问题是如何缩减成本,减少功耗,温度测量的准确性和多路温度的同时显示。本方案设计...

发表于 2018-11-15 16:35 172次阅读
基于51单片机对两路DS18B20温度传感器的设...

基于STM32单片机启动文件的作用和启动过程解析

bootloader 分为boot 和loader,更多的时候是针对于linux系统,windows...

发表于 2018-11-09 16:15 195次阅读
基于STM32单片机启动文件的作用和启动过程解析

如何利用51单片机同时扩展RAM和ROM

下面这个系统中,8051同时扩展片外程序存储器和数据存储器,两片存储器的片选信号都接地, 即同时有效...

发表于 2018-11-09 16:00 191次阅读
如何利用51单片机同时扩展RAM和ROM

基于51单片机对电子储物柜系统的设计

LCD的数据引脚连接到P1口和RS,R / W,E引脚连接到P0.2,P0.3,P0.4。 L293...

发表于 2018-11-09 15:45 165次阅读
基于51单片机对电子储物柜系统的设计

基于51单片机查表指令的应用

与ROM之间的数据传送 MOVCA,@A + DPTR MOVCA,@A + PC ...

发表于 2018-11-08 16:29 100次阅读
基于51单片机查表指令的应用

如何对51单片机进行外部扩展

最近在项目中用到51单片机,因为某些条件限制,51单片机片上程序不是很大,需要进行外部扩展。

发表于 2018-11-07 17:16 590次阅读
如何对51单片机进行外部扩展

基于8502单片机计数器对LED灯的设计

函数功能:51单片机制作的频率计(当然这个频率计的频率范围是有限制的理论值为2Hz-1MHz) 编...

发表于 2018-11-07 16:50 147次阅读
基于8502单片机计数器对LED灯的设计

51单片机的内部组成及应用原理解析

STC89C52:8KFLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断...

发表于 2018-11-05 15:22 142次阅读
51单片机的内部组成及应用原理解析

51单片机知识概述

1)h文件作用1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明2 提供接口...

发表于 2018-11-03 10:32 466次阅读
51单片机知识概述

基于51单片机对自动打铃系统的设计

#include “reg51.h” #include “intrins.h” #define...

发表于 2018-10-31 15:48 188次阅读
基于51单片机对自动打铃系统的设计

51单片机的工作流程及原理解析

1.ROM:只读存储器,单片机的只读存储区大多用于存储程序固又称程序存储器。 51单片机是EP...

发表于 2018-10-30 16:14 344次阅读
51单片机的工作流程及原理解析

基于51单片机漩涡流水点阵的设计

#include typedefunsignedcharuchar; typedefun...

发表于 2018-10-29 16:13 148次阅读
基于51单片机漩涡流水点阵的设计

51单片机中的定时计数器的主体结构及功能解析

TFi-定时/计数器溢出标志位;计数溢出时,硬件自动置1,在中断允许条件下,是向CPU请求中断的信号...

发表于 2018-10-29 15:19 128次阅读
51单片机中的定时计数器的主体结构及功能解析

基于51单片机可修改错误功能的计算器工作原理解析

utilities.h #ifndefUTILITIES_H_INCLUDED #def...

发表于 2018-10-26 15:36 151次阅读
基于51单片机可修改错误功能的计算器工作原理解析

如何采用51单片机连接24C02-C语言测试代码

1.关闭非IIC通信器件,比如我的开发板SDA和SCL也连接了DS1302,造成干扰会没有结果。 ...

发表于 2018-10-26 15:27 136次阅读
如何采用51单片机连接24C02-C语言测试代码

浅谈51内核单片机中断源

51内核的最基础的中断源请求有外部中断、定时器中断和串口中断,这也是学习和开发者最长用的。当然还有其...

发表于 2018-10-21 10:15 425次阅读
浅谈51内核单片机中断源

51单片机有哪些模拟串口的方法有哪些

随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数...

发表于 2018-10-20 10:36 417次阅读
51单片机有哪些模拟串口的方法有哪些

基于51单片机对1602液晶板的并行操作

TX-1C板操作并行模式的1602液晶液晶第1,2脚是gnd和vcc第3脚是对比度调节第4脚是数据/...

发表于 2018-10-18 14:59 150次阅读
基于51单片机对1602液晶板的并行操作

浅谈基于H桥电路的控制电机的正反转和PWM调速

了个H桥电路,控制电机的正反转和PWM调速,程序是网上的,改改引脚就能用,电路和源程序如下。

发表于 2018-10-16 08:17 262次阅读
浅谈基于H桥电路的控制电机的正反转和PWM调速

DHT11温湿度传感器原理剖析

发表于 2018-10-08 12:51 674次阅读
DHT11温湿度传感器原理剖析

51单片机超声波模块数码管程序分享

超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,写的是我使用的是慧净开...

发表于 2018-10-05 09:18 560次阅读
51单片机超声波模块数码管程序分享

51单片机如何实现流水灯?51单片机实现流水灯的...

首先,介绍下原理。下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道...

发表于 2018-10-03 10:38 2028次阅读
51单片机如何实现流水灯?51单片机实现流水灯的...

4×4键盘C51单片机程序源码分享

本程序已经调试通过,4*4键盘接P1口数据从P2的8个发光二极管来表示,也可以接数码管;只是为了能够...

发表于 2018-10-01 15:30 495次阅读
4×4键盘C51单片机程序源码分享

如何采用51单片机控制电机的旋转角度?

typedefunsignedcharuchar; typedefunsignedintuint;...

发表于 2018-10-01 09:00 307次阅读
如何采用51单片机控制电机的旋转角度?

基于51单片机嵌入式系统仿真设计

传统的嵌入式系统中,设计周期、硬件和软件的开发是分开进行的,并在硬件完成后才将系统集成在一起,很多情...

发表于 2018-09-28 15:28 207次阅读
基于51单片机嵌入式系统仿真设计

怎样用CD4033制作数字秒表

此款秒表采用发光数码管显示,计时精度为百分之一秒,最大计时时间为9.99s。

发表于 2018-09-28 09:53 238次阅读
怎样用CD4033制作数字秒表

51单片机在智能时钟控制系统中的应用设计

随着电子技术产业结构调整,生产工艺的飞速发展,人们生活水平的不断提高,家用电器逐渐普及,市场对于智能...

发表于 2018-09-27 15:56 262次阅读