搜索
bottom↓
回复: 8

用中断写的花样流水灯无法进入第二个模式,求高手

[复制链接]

出0入0汤圆

发表于 2013-1-6 20:06:06 | 显示全部楼层 |阅读模式
本帖最后由 孤独的凯 于 2013-1-6 20:07 编辑

#include<AT89X52.h>
#define led P2
unsigned int i,j,t,z;
int code a[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
int code b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int code c[8]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
int code d[8]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f};
void first()                                                                                        //led灯从左向右依次循环并返回
{
        if(t<8)                                                                                                //t表示执行次数
        {                                                                                                        //j表示数组a的j-1个元素
                led = a[j];
                j++;
                z++;
                i = 0;                                                                                        //清除标志位
                t++;                                                                                                }
        else
        {
                if(t >= 8 && t <=15)
                {
                        led = b[j-8];
                        j++;
                        z++;
                        i = 0;
                        t++;                                                                                                }
                else
                {
                        i=0;                                                                                //清除标志位
                        t=0;                                                                                //执行次数清零
                        j=0;
                }
        }
}

void second()
{
        if(t<8)
        {
                led = c[j-8];
                j++;
                z++;
                i = 0;
                t++;
        }
        else
        {
                if(t >= 8 && t < 16)
                {
                        led = d[j-16];
                        j++;
                        z++;
                        i=0;
                        t++;                                                                                                  }
                else
                {
                        j=0;
                        i=0;
                        t=0;                                                                           //执行次数清零
                        z=0;
                }
        }
}
void main()
{
       
        TMOD = 0x01;
        TH0 = 0xD8;
        TL0 = 0xf0;
        EA = 1;
        ET0 = 1;
        i = 0;
        j = 0;
        t = 0;                                                                                                 //执行次数清零
        z = 0;
        TR0 = 1;
        led = 0xff;
        while(1);
}
void et0interrupt() interrupt 1
{
        TH0 = 0xD8;
        TL0 = 0xf0;
        i++;
        if(i == 50)
        {        
                if(z / 16 == 0)
                {
                        first();
                }
                else
                {
                        if(z /16 =1)
                        {
                                second();
                        }
//                        else
//                                third();               
                }
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-1-6 20:20:37 | 显示全部楼层
中断里  / 改成%。

出0入0汤圆

 楼主| 发表于 2013-1-6 21:48:26 来自手机 | 显示全部楼层
就是要获得除式的商

出0入0汤圆

发表于 2013-1-6 22:07:02 | 显示全部楼层
if(z /16 ==1) {
 second();
}

出0入0汤圆

发表于 2013-1-6 22:17:29 | 显示全部楼层
if(z /16 =1)
这个是什么?????

出0入0汤圆

发表于 2013-1-6 22:28:11 | 显示全部楼层
sco518 发表于 2013-1-6 20:20
中断里  / 改成%。

正解

出0入0汤圆

 楼主| 发表于 2013-1-6 23:04:59 来自手机 | 显示全部楼层
yklstudent 发表于 2013-1-6 22:17
if(z /16 =1)
这个是什么?????

8个流水灯一次循环16次,第二个16次从17-31。让单片机进入下一个模式

出0入0汤圆

 楼主| 发表于 2013-1-6 23:07:55 来自手机 | 显示全部楼层
貌似是first()里的第二个else根本就没进去。但不知道为什么

出0入0汤圆

发表于 2013-1-6 23:16:46 | 显示全部楼层
孤独的凯 发表于 2013-1-6 23:04
8个流水灯一次循环16次,第二个16次从17-31。让单片机进入下一个模式

首先判断条件是== 你那个事赋值语句 当然不可能条件成立了 还要else语句是不会得到执行的 first和second内的一样
你只要分析下逻辑就知道为什么了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 16:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表