/***************************************************************************/
#include <reg51.h>
sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
void YS(char hs); void XS(int xm,int xs); void Time1(void);int n,i,m,s;
/***************************************************************************/
void main(void){Time1();while(1){XS(m,s);}}//主函数
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;
if(n>1000){n=0;s++; if(s>59){s=0;m++;if(m>59){m=0;}}}
}
/***************************************************************************/
void Time1(void)//定时器初始化
{
TH0=(65536-921)/256; TL0=(65536-921)%256;
TMOD=0x01; EA=1; ET0=1; TR0=1;
}
/***************************************************************************/
void XS(int xm,int xs) //数码管显示
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10; d3=(xm/1)%10; d4=(xm/10)%10;
P0=table[d1]; Axs=0; YS(10); Axs=1;//个位显示
P0=table[d2]; Bxs=0; YS(10); Bxs=1;//十位显示
P0=table[d3]; Cxs=0; YS(10); Cxs=1;//百位显示
P0=table[d4]; Dxs=0; YS(10); Dxs=1;//千位显示
}
/***************************************************************************/
void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延时函数
/***************************************************************************/
和你要的一样,无偿奉献了
我的是数字秒表的,也一样吗
追答一样的,无非是定时器中判断值多少而已
定时器每一毫秒产生一个中断,变量就加一,如果1000次中断,那么就是一秒钟
所以,如果你把1000改为10,你的数码管显示的就是你想要的啦
基于51单片机的秒表计时怎么这么快
基于51单片机的秒表计时快是因为精度高。51单片机的定时器0的方式1计时,结果用4位数码管显示,分别为秒十位,秒个位,毫秒百位,毫秒十位。所以总共最大计时为1分钟,精确到了0.01秒。
用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器...
用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。用proteus做的时钟 可以显示年月日时分秒 可调整时间 有图 \/ includereg52.h
用4个动态数码管显示,实现0~9999计数功能,延时为1s,用c语言。
\/***数显秒表,范围0~9999***\/ \/***源程序默认硬件环境:52单片机,12MHz晶振,4位共阳数码管,P0 口段选,P10~P13 高电平位选(NPN三极管驱动),P13为最高位数码管***\/ include"reg52.h"\/\/包含52头文件 define TRUE1\/\/定义布尔量'1':真 define FALSE0\/\/定义布尔量'0':假 define uchar unsi...
利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
本文利用单片机实现数字时钟计时功能的主要内容,其中AT89S52是核心元件同时采用数码管动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。2 方案...
使用51单片机,4个共阳数码管,每个数码管连接一个开关
单片机是单线程的,你做的按键应该是按下程序就在在那里一直等到你松开吧,而这个时候单片机就没有机会去做关于显示的事情了,你不想当数码管显示最好是在等待前把显示给关了
关于51单片机实现数字秒表程序算法出错的问题
从而应该每次BUF[0]=1,数码管个位应该一直显示1才对,可是却显示的是0。根据你第二张图的上面,我发现你还用来显示秒ms,而刷新完毫秒后就立刻去刷新s了,而这时秒位还没更新到1,所以99次刷新为0,只有一次刷新为1,所以显示0时会闪,而且刷新为1停留的时间占的比重太小,根本看不到刷新为1的...
单片机编程制作电子秒表能显示分(0-99),秒(0-59)
、位选(决定多位数码管中哪一位显示)、段选(决定数码管显示的数字),另外还有锁存器(教材P36,可通过控制锁存端来改变数据输出的状态)。上周单片机实验课的内容是编一个秒表,在4位数码管中分别显示分和秒还有分秒,即最多可显示“9:59.9”。这里我用两个键实现了秒表的启动\/暂停和清零功能,...
AT89C51单片机用4位数码管做秒表,要求用动态扫描做,汇编语言
;汇编时钟程序。4位共阳管。P0口段码,P2.0~P2.3位码。显示毫秒和秒。三个按键一个控制时钟开始走,一个控制暂停和继续。。。一个按键清0 ;12M晶振 2011 04 20 调试完成 STRT EQU P3.2 STP EQU P3.3 CLRR EQU P3.5 ORG 00H SJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN: MOV ...
利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
共阳数码管中断程序:include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uint num,a;uchar bai,shi,ge;void init();void delay(uint);void ...
...数码管显示,范围从0000~9999,可暂停,可复位。要求用MC51单片机...
usecond equ 50h msecond equ 51h second1 equ 52h second2 equ 53h second3 equ 54h second4 equ 55h org 00h ljmp start org 03h ljmp int_ex0 org 0bh ljmp int_t0 org 013h ljmp int_ex1 org 01bh ljmp int_t1 org 0100h start: ...