52单片机制作秒表问题

利用c语言编程,利用定时计数器,来实现电子秒表功能,秒计时精确到0.01秒设计启动、暂停、清零按钮用四位数码管显示,求给出正确的可执行程序,急需,在此先谢谢了

这是仿真图,只是用了六位的数码管,你用四位的数码管的话,只要不接w1和w2就行了,

我有程序,你说的基本功能也可以实现

不知道你装没装keil和proteus软件,我把文件传上来,顺便也传一份txt的C程序

追问

程序有错。。。运行不了

追答

所有的寄存器都报错,肯定是头文件没包含进去,或者是头文件不对
你看一下有没有
#include

我好想写错了写成#include
不知道什么时候不小心弄上去了个x

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-09
#include<reg52.h>

sbit AA=P0^7;//数码管显示用IO端口
sbit BB=P0^6;
sbit CC=P0^5;
sbit DD=P0^4;

sbit K1=P3^2;
sbit K2=P3^5;
sbit K3=P3^7;

int s,m;
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};
void YS(int x); //延迟函数声明
void XS(int d); //显示函数声明

void main()
{
s=m=0;
TMOD=0x01;//设置定时器工作方式
TH0=(65536-1000)/256;//1毫秒
TL0=(65536-1000)%256;//定时器装初始值
EA=1;//开总中断
ET0=1;//开定时器 0 的中断
while(1)
{
XS(s); //显示

if(K1==0){ TR0=1; }//开启定时器,开始计时
if(K2==0){ TR0=0; }//关闭定时器,暂停计时
if(K3==0){ s=m=0; }//清空数据
}
}

void YS(int x) //延迟子函数
{
int y;
for(;x>0;x--)
for(y=100;y>0;y--);
}

void XS(int d) //显示子函数
{
char d1,d2,d3,d4;
d4=d%10; //取个位 %求余
d3=(d/10)%10; //取十位
d2=(d/100)%10;
d1=(d/1000)%10;

P2=table[d4]; AA=0; YS(1); AA=1;//个位显示
P2=table[d3]; BB=0; YS(1); BB=1;//十位显示
P2=table[d2]; CC=0; YS(1); CC=1;//百位显示
P2=table[d1]; DD=0; YS(1); DD=1;//千位显示
}

void timer() interrupt 1 //中断处理子函数
{
TH0=(65536-922)/256;//1毫秒
TL0=(65536-922)%256;

m++;
if(m>=10) //判断定时是否到达1s 即 1000 ms
{ m=0; s++; }

if(s>=9999) //判断定时是否到达1s 即 1000 ms
{ s=0; }
}
绝对可用的,你试试吧,可能我的程序端口与你的不一样,自己改一下就可以了追问

你的程序没有设置位选哦。。。。我的单片机是6位数码管的

追答

道理是一样的,只是你那多了两个数码管而已,

但是在实用的时候,一般是不采取这种方式显示的

你可以实用MAX7219模块,这样占用单片机的端口会很少,程序运行速度也很快

本回答被提问者和网友采纳
相似回答