打印
[疑难问答]

求助 定时器中断和流水灯的问题

[复制链接]
749|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,其余各位不变。

使用特权

评论回复
5
zhouhuanの| | 2016-11-17 19:09 | 只看该作者
建议你还要加强理论学习,否则,盲目实践,事倍功半。

使用特权

评论回复
6
wanglaojii| | 2016-11-17 19:13 | 只看该作者
张志良编著《80C51单片机实用教程》ISBN978-7-04-044532-9,高教社出版。用于学习51单片机原理,便于阅读理解,便于自学。

使用特权

评论回复
7
laozhongyi| | 2016-11-17 19:14 | 只看该作者
定时器好好学,可以自己尝试定时时间,加强练习

使用特权

评论回复
8
Edisons| | 2016-11-17 19:18 | 只看该作者
看了看,再次指出,你那个高电平亮灯控制是不妥的。

使用特权

评论回复
9
_gege| | 2016-11-17 19:19 | 只看该作者
《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。

使用特权

评论回复
10
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之间的时候时间会有重叠是吗?

使用特权

评论回复
11
shashaa|  楼主 | 2016-11-17 19:25 | 只看该作者
bbapple 发表于 2016-11-17 19:03
if(n==1){
        D6=0;
        D7=0;

谢谢 用的这种方法 结果是正确的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

1494

帖子

6

粉丝