51单片机12MHZ晶振用定时器怎样实现100ms的定时,我想要做秒表,用数码管动态显示应该怎样做啊!

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void Delay_1ms(uint u);
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
uchar code a []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar t=0;
uchar i=0;
main()
{
TMOD=0x01;
EA=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
while(1)
{
if(t==2)
{
t=0;
P0=0;
p20=0;
p21=0;
p22=0;
P0=a[i%10];
i=i+1;
}
}
}
void t0()interrupt 1
{

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;

t= t+1;
}
我现在只编到这种程度,不知道怎样用动态扫描到秒啊(上面的到100MS)

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void Delay_ms(uint u)
{while(u--);}
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
//uchar code a []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//uchar code a[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
uchar code a[10] = {0xC0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
uchar t=0;
uchar i=0;
uchar time=0;
void Display(uint k)
{

P0 = a[k/100%10];
P20=1;
Delay_ms(15); //显示5ms十位
P20=0;
P0 =a[k%100/10];
P21=1;
Delay_ms(15); //显示5ms个位
P21=0;
P0 = a[k%10];
P22=1;
Delay_ms(15); //显示5ms个位
P22=0;
}
void main()
{t=0;
EA=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
while(1)
{
Display(time);
}
}
void t0()interrupt 1
{

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==2)
{
time++;
t=0;
}
}
你的问题是延迟那边void Delay_1ms(uint u);
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-25
//实例52:用定时器T0控制输出高低宽度不同的矩形波
#include<reg51.h> //包含51单片机寄存器定义的头文件
sbit u=P3^0; //将u位定义为P3.0,从该引脚输出矩形脉冲
unsigned char Countor; //设置全局变量,储存负跳变累计数
/*************************************************
函数功能:延时约30ms (3*100*100=30 000μs =30ms)
*************************************************/
void delay30ms(void)
{
unsigned char m,n;
for(m=0;m<100;m++)
for(n=0;n<100;n++)
;
}

/*******************************************
函数功能:主函数
******************************************/
void main(void)
{
unsigned char i;
EA=1; //开放总中断
EX0=1; //允许使用外中断
IT0=1; //选择负跳变来触发外中断
Countor=0;
for(i=0;i<100;i++) //输出100个负跳变
{
u=1;
delay30ms();
u=0;
delay30ms();
}
while(1)
; //无限循环, 防止程序跑飞
}
/**************************************************************
函数功能:外中断T0的中断服务程序
**************************************************************/
void int0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
Countor++;
P1=Countor;

}

改吧改吧 就是你的啦追问

看了半天也没觉得这个和秒表有什么关系啊这不是外部中断么?现在我把程序编出来了关键的在于现在怎样用动态扫描,我这个总是一位数码管亮,

追答

就是用到定时100ms 中断 显示 呵呵

...我想要做秒表,用数码管动态显示应该怎样做啊!
P20=1;Delay_ms(15); \/\/显示5ms十位 P20=0;P0 =a[k%100\/10];P21=1;Delay_ms(15); \/\/显示5ms个位 P21=0;P0 = a[k%10];P22=1;Delay_ms(15); \/\/显示5ms个位 P22=0;} void main(){t=0;EA=1;TMOD=0x01;TH0=(65536-50000)\/256;TL0=(65536-50000)%256;ET0=1;...

单片机晶振为12mhz,要求定时器t1工作方式1,分别实现5ms10ms100ms1s的...
5ms溢出进入中断一次,如果需要10ms或更长的定时时间,可以定义一个变量,溢出一次变量自增一次。

如何用C51单片机做出以下程序 “秒表是倒计时,从100秒开始倒计时 用数...
假设P0 P2接数码管,静态驱动,程序如下:include<reg52.h> define uchar unsigned char define uint unsigned int uchar num=100;uchar time=0;\/\/共阴数码管七段码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};void Delay1ms(uint i) \/\/1ms延时...

单片机晶振为12mhz,要求定时器t1工作方式1,分别实现5ms10ms100ms1s的...
100ms 1s的定时,没法一次完成,因最大定时值是65.535mS 可通过定时50MS 累计2次和20次实现

【51单片机】基于STC89C52RC的电子秒表
设计采用STC89C52RC作为中央处理器,配置12MHz晶振电路以确保精确的时间计数。复位电路通过按键和电容限流电阻实现。按键电路由按键和上拉电阻构成,便于操作。显示电路采用8段共阳数码管,方便直观显示时间。电路设计主要包括单片机、晶振电路、复位电路、按键电路和数码管显示电路。STC89C52RC单片机与电路间的连接...

时钟频率为12MHZ, 如何利用51单片机定时\/计数器定时500ms
12MHZ的51单片机,定时器最大只能定时65.535ms,所以要定时500ms的时间,需要产生10次50ms的定时。步骤如下:1、每隔50ms定时器中断溢出,计数+1。2、当计数达到10次时,便产生了500ms的定时啦,然后,你自己根据你的设计,需要让单片机做什么就自己写些什么(比如让某个io口取反)3、计数达到10次...

单片机秒表实验原理
该实验利用单片机内置的定时器\/计数器模块,通过预设不同的定时值来控制计时的进行。当启动计时后,定时器开始计数,每经过一定时间间隔,计数器加1,以此来记录时间。与此同时,显示电路与LED数码管配合工作,将计数结果以0.01秒为单位进行实时显示,确保计时的精确性。该秒表实验还具备开始、停止和复位...

用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器...
用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。用proteus做的时钟 可以显示年月日时分秒 可调整时间 有图 \/ includereg52.h

51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一...
要做秒表,一定要用定时器吧,假如用T0,那开始初始化时,不写TR0=1,先不启动。\\x0d\\x0a当按一下键,再启动,TR0=1,就开始计时了。\\x0d\\x0a再 按一下键,就停止,TR0=0,就不计时了。\\x0d\\x0a程序好写,先 定义一个按键\\x0d\\x0asbit key=P1^1; \/\/具体是哪个 键,...

...数码管显示,范围从0000~9999,可暂停,可复位。要求用MC51单片机...
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: mov tmod,#12h mov th0,#6 mov tl0,#6 mov th1,#0d8h mov tl1,#0f0h mov u...

相似回答