[疑难问答] 求助 定时器中断和流水灯的问题

[复制链接]
1038|10
 楼主| shashaa 发表于 2016-11-17 18:58 | 显示全部楼层 |阅读模式
#include<reg52.h>//T1的方式2,时间间隔一秒 流水灯 每次三个
#define uint unsigned int
sbit D0=P1^0;
sbit D1=P1^1;
sbit D2=P1^2;
sbit D3=P1^3;
sbit D4=P1^4;
sbit D5=P1^5;
sbit D6=P1^6;
sbit D7=P1^7;
void display(uint);
uint num,n;
void main()
{
        TMOD=0x20;
        TH1=256-200;
        TL1=256-200;
        EA=1;
        ET1=1;
        TR1=1;
        while(1)
{
        display(n);        
}

}

void T0_time() interrupt 3
{
        num++;
        if(num==5000)
        {
                num=0;
                n++;
                if(n==4)
                {
                        n=1;
                }
        }


}
void display(uint n)
{
if(n==1)
        {
        D0=~D0;
        D1=~D1;
        D2=~D2;
        }
        if(n==2)
        {
        D3=~D3;
        D4=~D4;
        D5=~D5;
        }
        if(n==3)
        {
        
        D6=~D6;
        D7=~D7;
        D0=~D0;
        }

}
这段代码,我运行出来 第一次循环是正确的,每次三个闪烁,但是从第二次循环就开始乱闪了 每次也不是三个。。各位看看我错在哪里啊
qiangweii 发表于 2016-11-17 19:02 | 显示全部楼层
當(n==1) 會執行多次的  D0=~D0;D1=~D1;D2=~D2; 這些敘述
當 n== 2 , n==3 時亦同  ...
bbapple 发表于 2016-11-17 19:03 | 显示全部楼层
if(n==1){
        D6=0;
        D7=0;
        D0=1;
        D1=1;
        D2=1;
        }
        if(n==2)
        {
        D0=0;
        D1=0;
        D2=0;
        D3=1;
        D4=1;
        D5=1;
        }
        if(n==3)
        {
         D3=0;
        D4=0;
        D5=0;
        D6=1;
        D7=1;
       // D0=1;
        }
handleMessage 发表于 2016-11-17 19:08 | 显示全部楼层
若欲D6=0; D7=0;D0=1;D1=1;D2=1;
可P1=(P1&0x3f)|0x07;//P1&0x3f,表示D6=0; D7=0,其余各位不变。再或0x07,表示D0=1;D1=1;D2=1,其余各位不变。
zhouhuanの 发表于 2016-11-17 19:09 | 显示全部楼层
建议你还要加强理论学习,否则,盲目实践,事倍功半。
wanglaojii 发表于 2016-11-17 19:13 | 显示全部楼层
张志良编著《80C51单片机实用教程》ISBN978-7-04-044532-9,高教社出版。用于学习51单片机原理,便于阅读理解,便于自学。
laozhongyi 发表于 2016-11-17 19:14 | 显示全部楼层
定时器好好学,可以自己尝试定时时间,加强练习
Edisons 发表于 2016-11-17 19:18 | 显示全部楼层
看了看,再次指出,你那个高电平亮灯控制是不妥的。
_gege 发表于 2016-11-17 19:19 | 显示全部楼层
《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。
 楼主| shashaa 发表于 2016-11-17 19:25 | 显示全部楼层
qiangweii 发表于 2016-11-17 19:02
當(n==1) 會執行多次的  D0=~D0;D1=~D1;D2=~D2; 這些敘述
當 n== 2 , n==3 時亦同  ...

也就是说在n=1和 n=2之间的时候时间会有重叠是吗?
 楼主| shashaa 发表于 2016-11-17 19:25 | 显示全部楼层
bbapple 发表于 2016-11-17 19:03
if(n==1){
        D6=0;
        D7=0;

谢谢 用的这种方法 结果是正确的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

1494

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部