• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

定时器是一个坑啊

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uint count=0;

void time0_int(void)

{

TMOD=0x00;//工作方式0

TH0=0xe3;//高八位赋值,使之延时为1ms

TL0=0x06;//低八位赋值

ET0=1;//T0开中断

EA=1;//开总中断

TR0=1;//启动定时器

}

void time0() interrupt 1

{

TH0=0xe3;//高八位赋值

TL0=0x06;//低八位赋值

count++;

}

void main(void)

{

uchar i=0;

void time0_int();

P2=0xfe;

while(1)

{

P0=table[i%10];

if(count==1000)

{

count=0;

i++;

}

}

}

全部回复(28)
正序查看
倒序查看
for_real
LV.3
2
2014-02-26 23:38
为什么数码管上只显示0啊
0
回复
pirate
LV.4
3
2014-02-26 23:39
以后给程序的时候要附上电路图。。。。不然只给程序谁看得懂啊。
0
回复
stony_s
LV.3
4
2014-02-26 23:41
@pirate
以后给程序的时候要附上电路图。。。。不然只给程序谁看得懂啊。
主函数里面为什么还要加上(void)呢?求解,但估计不是这里的问题,再回去看看老师的数码管显示的实例吧
0
回复
stony_s
LV.3
5
2014-02-26 23:41
@stony_s
主函数里面为什么还要加上(void)呢?求解,但估计不是这里的问题,再回去看看老师的数码管显示的实例吧
主函数后面
0
回复
pirate
LV.4
6
2014-02-26 23:42
@stony_s
主函数后面
加不加都行没影响
0
回复
pirate
LV.4
7
2014-02-26 23:43
@pirate
加不加都行没影响
很对
0
回复
daylight
LV.4
8
2014-02-26 23:46
@pirate
很对
代表没有返回值
0
回复
heal
LV.3
9
2014-02-26 23:47
@daylight
代表没有返回值
肯定是0啊
0
回复
heal
LV.3
10
2014-02-26 23:47
@heal
肯定是0啊
你把if(count==1000)改成if(count=1000)试试
0
回复
pirate
LV.4
11
2014-02-26 23:49
@heal
你把if(count==1000)改成if(count=1000)试试
你这是在赋值,不是判断,赋值成功,就是一个死循环
0
回复
金鱼1
LV.3
12
2014-02-26 23:50
@pirate
你这是在赋值,不是判断,赋值成功,就是一个死循环
前十秒不变,你等够十秒了吗
0
回复
for_real
LV.3
13
2014-02-26 23:52
@金鱼1
前十秒不变,你等够十秒了吗
等够了,,程序的本意是每隔一秒数码管加一显示
0
回复
金鱼1
LV.3
14
2014-02-26 23:52
@for_real
等够了,,程序的本意是每隔一秒数码管加一显示
前10s不变后面 每10s变化一次你是这个意思?
0
回复
for_real
LV.3
15
2014-02-26 23:53
@金鱼1
前10s不变后面每10s变化一次你是这个意思?
每隔一秒数码管加一显示
0
回复
daylight
LV.4
16
2014-02-26 23:54
中断打开顺序倒了,T0无法开启
0
回复
for_real
LV.3
17
2014-02-26 23:55
@daylight
中断打开顺序倒了,T0无法开启
 EA应该在最前面?我试试
0
回复
daylight
LV.4
18
2014-02-26 23:55
@for_real
 EA应该在最前面?我试试
你的显示函数呢?该不会是这个吧?P0=table[i%10];你写少位码肯定不显示
0
回复
god_father
LV.3
19
2014-02-26 23:56
中断打开无先后顺序,这是开关不是门
0
回复
close3
LV.5
20
2014-02-26 23:57
@for_real
 EA应该在最前面?我试试
你这是等于1000才加,当然只能是0
0
回复
close3
LV.5
21
2014-02-26 23:57
@close3
你这是等于1000才加,当然只能是0
看错,把时钟频率调小一点看看
0
回复
daylight
LV.4
22
2014-02-26 23:59
main函数里面的void time0_int();改成time0_int();
0
回复
for_real
LV.3
23
2014-02-26 23:59
@daylight
main函数里面的voidtime0_int();改成time0_int();
这位厉害
0
回复
daylight
LV.4
24
2014-02-27 00:00
@for_real
[图片]这位厉害
简单的语法错误,细心一点。
0
回复
金鱼1
LV.3
25
2014-02-27 00:00
void main(void){uchar i=0;void time0_int();你在函数里面声明函数是个什么意思?
0
回复
金鱼1
LV.3
26
2014-02-27 00:01
@金鱼1
voidmain(void){uchari=0;voidtime0_int();你在函数里面声明函数是个什么意思?
另外,定时器用的好是神器,用的不好就是深坑
0
回复
cltwolf
LV.5
27
2014-02-27 10:33
@for_real
[图片]这位厉害
唉,你用什么软件平台的?如果有支持颜色的话,把关键字的颜色调一下,醒目点。
0
回复
kcfoo1
LV.5
28
2014-02-28 08:46
@for_real
为什么数码管上只显示0啊

看你程序应该是显示程序有问题,如果p0是显示数据,那你应该显示count呀,怎么显示临时数据I呢,i是会不停被清空的,还有count>=1000比较保险,另外如果你显示1位数的话P0=table[count];count>=10就可以了

0
回复
kcfoo1
LV.5
29
2014-02-28 08:53
@kcfoo1
看你程序应该是显示程序有问题,如果p0是显示数据,那你应该显示count呀,怎么显示临时数据I呢,i是会不停被清空的,还有count>=1000比较保险,另外如果你显示1位数的话P0=table[count];count>=10就可以了
不好意思,没认真看你程序,count是倍率参数,那你i应该放到主程序外,做成外部变量,另外i也要防溢出
0
回复