求助——单片机小程序:用定时器以间隔500MS在6位数码管上依次显示0,1,2,3….C,D,E,F,重复

以下是程序,为什么数码管上显示乱码呢?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar num=0;
uchar tt=0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
wela=1;
P0=0xc0;
wela=0;
if(tt==10)
{
tt=0;
if(num>15)
{
num=0;
}
dula=1;
P0=table[num];
num++;
dula=0;
}
}
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}

第1个回答  2013-02-01
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar num=0;
uchar tt=0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while(1);
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
void t1_isr() interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
wela=1;
P0=0xc0;
wela=0;
if(tt>=10)
{
tt=0;
if(num>15)
{
num=0;
}
dula=1;
P0=table[num];
num++;
dula=0;
}
}
}
第2个回答  推荐于2016-06-11
程序这样写看看
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar num=0;
uchar tt=0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
wela=1;
P0=0xc0;
wela=0;

while(1)
{
dula=1;
P0=table[num];
dula=0;
}
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==10)
{
tt=0;
num++;
if(num>15)
{
num=0;
}
}
}追问

还是不行啊,数码管全都显示0;还一直在闪

追答

void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==10)
{
tt=0;
num++;
if(num>15) //这里改一下 if(num == 16)
{
num=0;
}
}

本回答被提问者采纳

求助——单片机小程序:用定时器以间隔500MS在6位数码管上依次显示0,1...
define uint unsigned int define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;uchar num=0;uchar tt=0;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void main(){TMOD=0x01;TH0=(65536-50000)\/256;TL0=...

求单片机中围绕五个中断的程序题目 ?急求!
4、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3….C、D、E、F,重复。

51单片机用定时器中断让LED流转间隔为400ms,500ms,600ms,一直到1200m...
X=2^n-Y*10^(-3)\/(12\/6*10^6)由于定时器有最大定时时间,因此你还需要考虑定时次数累加,才能达到你要的时间。

...4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒...
它是由秒信号发生器(时基电路)、小时分钟计数器及译码和驱动显示电路3部分组成,其基本工作过程是:时基电路产生精确周期的脉冲信号,经过分频器作用给后面的计数器输送1HZ的秒信号,最后由计数器及驱动显示单元按位驱动数码管时间显示,但是这样设计的电路比较复杂,使用也不灵活,而且价格比较高,故不采用此方案。 图2.1 方...

单片机 数码管动态显示 0-99
你说的总是先亮第一个,是哪一个??有个位,还是十位?还有你说的一秒是指数字增一,延迟一秒?如果是,那你在MAIN WHILE中加个delayms延迟。具体是延迟多少,就要看你的晶振了。

单片机AT89C52六位数码管前两位数码管要怎么同时显示0,2,4,6,8,并...
另外,要实现此功能,只需利用一个定时器即可,使用两个太浪费了,也增加了系统的运行速度和可靠性等 帮忙改了下,看是否运行正常,这边硬件测试通过了,只是数码管的编码部分用的不一样 include<reg52.h> define uchar unsigned char define uint unsigned int uint num,shi,ge;sbit dula=P1^0;sbi...

求7段数码管单片机实验程序的编写。 内容,用p1口输出口,作为7段数码...
define DisTimeAt1msCount3\/\/单'位'数码管显示时间,数码管刷新频率f=1\/(N×t),其中 N为数码管位数, t为单'位'数码管显示时间 define T1sAt1msCount1000\/\/1秒 计数值(在定时器为1ms 情况下计数)define TimesEnd1000000\/\/显示内容范围 0~999999 uchar code SEG_B_List[10]={0xc0,0xf9,0x...

如何用单片机做一个简单的倒计时器?
ET0=1;\/\/打开定时器0中断允许 EA=1;\/\/打开总中断 TR0=1;\/\/打开定时器-->启动定时器中断!ET1=1;TR1=1;TH1=(65536-250)\/256; \/\/FC TL1=(65536-250)%256;} \/ 函 数 名 : DigDisplay 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示 \/ void DigDisplay(){ u8 i;for...

单片机秒表程序 80C51
uchar ptr_last = 0; \/\/上一次扫描键盘值,通过和这次比较,用于检测上升沿uchar count = 0; \/\/设置时间时记住设置到哪位(时2位,分2位,秒2位,共6位,依次为1到6)?bit mm = 0; \/\/闪烁扫描的标志位,0 不显示,1 显示sbit LCD_RS=P2^5; \/\/RS为液晶的寄存器选择,高电平时选择数据寄存器、低电平时...

急!基于单片机的数字示波器设计
首先根据输出波形的频率和幅值进行编码,存储在单片机的ROM里,然后以一定的时间间隔依次将这些数字量送往D\/A进行转换输出,这样,只要循环送数,在D\/A的双极性输出端就可以得到波形波形。采用单片机片内的振荡器、上电复位和外部硬件看门狗电路。至于波形编码,网上资料很多,下面是硬件电路设计的描述(这个是网上找的):输出...

相似回答