四位共阳极数码管实现秒表功能

本文介绍了如何利用C语言编程,结合共阳极数码管,实现一个简单的秒表功能。内容包括数码管的驱动原理、C语言计时器的设置以及数码管显示秒表数值的更新逻辑。
摘要由CSDN通过智能技术生成

#include <reg51.h>
#include <intrins.h>
#define GPIO_DIG P2                         
#define uchar unsigned char                  
#define uint unsigned int                  

sbit K1=P3^0;              
sbit K2=P3^1;               
sbit K3=P3^2;               

sbit L1=P1^4;               
sbit L2=P1^5;               
sbit L3=P1^6;               
sbit L4=P1^7;               

sbit beep=P1^0;

unsigned char code DIG_CODE[10] = 
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

unsigned char code DIG_CODE2[10] = {
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

unsigned char DisplayData[4];

           uchar i,m;           

           uchar min=0;

           long int k=0;

           uint Second_Counts;             

void DigDisplay()                  

{

        uns
好的,以下是一个简单的基于51单片机的四位数码管秒表代码。这个代码使用了定时器和中断来实现秒表计时功能,并通过数码管显示计时结果。 ```c #include<reg52.h> typedef unsigned char uchar; typedef unsigned int uint; uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管显示表 uchar time = {0, 0, 0, 0}; // 计时器数组 uint count = 0; // 计时器计数器 void delay(uint ms); // 延时函数 void display(); // 数码管显示函数 void main() { TMOD = 0x01; // 定时器0工作在模式1 TH0 = (65536-50000)/256; // 定时器初值 TL0 = (65536-50000)%256; ET0 = 1; // 打开定时器0中断允许位 EA = 1; // 打开总中断允许位 TR0 = 1; // 启动定时器0 while(1) { display(); // 显示计时结果 } } void timer() interrupt 1 { // 定时器中断服务程序 TH0 = (65536-50000)/256; // 定时器初值 TL0 = (65536-50000)%256; count++; // 计数器加一 if(count == 20) { // 每计数20次即1s count = 0; time++; if(time == 10) { time = 0; time++; if(time == 10) { time = 0; time++; if(time == 6) { time = 0; time++; if(time == 10) { time = 0; time = 0; time = 0; time = 0; } } } } } } void display() { // 数码管显示函数 uchar i; uchar flag = 0; for(i=3;i>0;i--) { // 去掉前导零 if(time[i] == 0 && flag == 0) { P2 = table[time[i]]; P2 |= 0x80; } else { P2 = table[time[i]]; flag = 1; } P0 |= (1<<i); delay(5); P0 &= ~(1<<i); } P2 = table[time]; P2 |= 0x80; P0 |= (1<<i); delay(5); P0 &= ~(1<<i); } void delay(uint ms) { // 延时函数,延时ms毫 uint i, j; for(i=ms;i>0;i--) { for(j=114;j>0;j--); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值