单片机AT89S52 如何用定时器0控制数码管从0变到9 每秒变一次 (C语言)

#include "AT89X52.h"
unsigned int i=0,count=0,n=-1;
unsigned char a[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
void timer0init(void)
{
TH0=0X00;
TL0=0X00;
TMOD=0x01;
TCON=0X10;
IE=0X82;
}
void timeover() interrupt 1
{
TH0=0X00;
TL0=0X00;
i++;
}
void main()
{
P1=0x7f,P0=a[i];
timer0init();
while(1)
{
P0=a[i%10];
}
}
我的程序不是每秒一变,求改程序。。谢谢。。。。。

用定时器,首先要设置定时的工作模式,误差最小的是方式2,8位自动重载模式。12M晶振,初值给55,定时时间就是200us,也就是你程序写的i=1,就是200us,那定时一秒的话就是i=5,再定义一个变量sec,if(i==5)sec++;显示sec就可以了
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-05
#include "AT89X52.h"
unsigned char i;
unsigned char count;
unsigned char temp;
unsigned char a[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
void timer0init(void)
{
TH0=(65536 - 50000) / 256;
TL0=(65536 - 50000)%256;
TMOD=0x01;
TCON=0X10;
IE=0X82;
}
void timeover() interrupt 1
{
TH0=(65536 - 50000) / 256;
TL0=(65536 - 50000)%256
count ++;
if(count == 20)
{
count = 0;
temp++;
if(temp == 10)
{
temp = 0;
}
}
}
void main()
{
P1=0x7f;
timer0init();
while(1)
{
P0=a[temp];
}
}本回答被提问者和网友采纳
第2个回答  2013-03-16
我的程序不是每秒一变,求改程序。。
----
你用的晶振频率是多少?

你不给出频率,程序,就没有办法改。
第3个回答  2013-03-01
具体的我没看哥们,++之后你该把i重新置0

51单片机at89s52怎么做0-9秒倒计时,求大佬解答
用一个共阴数码管接在P0口,由P0口输出段码。再用定时器定时50ms,采用中断方式,对中断计数20次就是一秒。用一个变量计秒,初值为9,每一秒减一,并送P0显示。仿真图如下。

AT89S52单片机 汇编语言 通过计时器编写0-9的循环显示
CJNE R2,#10,T0E MOV R2,#0 T0E:RETI END

AT89S52单片机与PC串口通讯,将数码管上显示的时间每隔1秒发送给PC...
Send1SData()\/\/采用中断回调函数。1S进入,相当于51系列的1S中断然后进入发送程序,那个有点啰嗦写起来,很多单片机都采用中断回调函数这样处理 { sendforPC(data);} PC端,用C语言写的话,就用MFC,首先你要知道,MSCOMM,(也就是俗称的电话控件)举个不贴切的例子它就是用来控制接收和发送串口数据...

AT89S52单片机与PC串口通讯,将数码管上显示的时间每隔1秒发送给PC...
SM0=0; SM1=1; \/\/设置方式1 8位异步收发 波特率可变 REN=1; \/\/允许串行口接收 } void TRAN(uchar temp){ SBUF=temp; \/\/发送数据 while(TI==0);TI=0;} void main(){ initial();while(1){ TRAN(0X95); \/\/该变量就好 delay(1000);TRAN(0X55);delay(1000);} } 刚才回答...

基于单片机AT89S52.编写一段程序,要求播放一段音乐,歌曲名《铃儿响叮 ...
\/\/主程序查音符码,将不同的初值装入定时器,定时器每中断一次,P3.7取反一次,形成不同频率的方波 \/\/11代表低音哆 21代表高音哆 1代表中音哆 include<reg52.h> sbit SPK = P3^7; \/\/P3.7外接扬声器 sbit dula=P2^6;这是数码管显示用的,显示程序同中时顺便也是延时程序 sbit wela=P2^...

用C语言编写8051单片机程序
\/* MCU: AT89S52 \/* MCU-crystal: 12M \/* Version: 01 \/* Last Updata: 2009-2-21 \/* Author:\/* Description:\/* 使用定时器0,定时中断2ms一次对数码管显示扫描;\/* 三个位管要以扫描方式显示,使用共阳管,计数速度为1S;\/* 段A-H接到P0.1...7,位选为 P1.0,1,2;\/* 流水也...

stc89c52单片机定时器实现按键长按识别问题
\/*AT89S52和STC单片机引脚是通用的,程序可以直接移植 晶振:12MHZ 引脚连接方式见下面定义,该程序经过我仔细调试,只要连接上即可直接运行,*\/ include<reg52.H> define seg_data P1 \/\/数码管显示数据输出端口 sbit K1 = P3^0; \/\/按键引脚定义 sbit K2 = P3^1;sbit K3 = P3^2;sbit bit1 ...

51单片机at89s52的位选和段选咋回事?
段选和位选是指单片机在控制数码管的时候,有2个部分,一个是位选,选择哪一位数码管可以通电(一般数码管都是有多位的)既被选中,二是段选,每一位都有8个段(一个数码管是由8个段构成的,一个段可以看成是一个小灯)段选控制被位选选中的这个数码管需要显示的数字。数码管要有显示需要两...

at89s52单片机 如何实现4个按键控制四位数码显示管,按p3.2数码管显示1...
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些控制信号。端口引脚 第二功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INTO(外中断0)P3.3 INT1(外中断1)P3.4 TO(定时\/计数器0)P3.5 T1(定时\/计数器1)P3.6 WR(外部数据存储...

AT89S52单片机有哪些特性?
11.串行通信波特率的单位是比特每秒(bps),对收发双方波特率的设定必须一致。12.“8”字型的LED数码管如果不包括小数点段共计7段,每一段对应一个发光二极管,有共阴极和共阳极两种接法。13.AT89S52单片机的机器周期等于12个时钟振荡周期。14.51系列单片机有5个中断源,优先中断级。15.定时器工作方式2...

相似回答