搜索
bottom↓
回复: 4

请教:数码管与流水灯不同时工作?

[复制链接]

出0入0汤圆

发表于 2012-11-21 15:48:38 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include"smguan.h"             //文件省略        
code uint8 shumaguan_1[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};  
code uint8 shumaguan_2[] = {0x40,0x79,0x24,0x30,0x19, 0x12,0x02,0x78,0x00,0x10,0xff};   //带小数点
void delay_ms(uint16 m) //用法延时100ms,就把ms_number赋值为50                                      
{     uint16 i;
        uint8 j;
        for(i=0;i<m;i++)
        {      for(j=0;j<200;j++);
                for(j=0;j<102;j++);
        }
}
/*****************数码管刷新函数***********************/
void refresh_led()                 
{       static uint8 j = 0;
       P0=0xff;   
        switch(j)
        {   case 0:ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j++;P0 = shumaguan_1[a[0]];break;  
              case 1:ADDR0= 1;ADDR1 = 0;ADDR2 = 0;j=0;P0 = shumaguan_2[a[1]];break;        
                default:break;
        }
}
/************************流水灯**********************/
void led_1()
{      uint8 j;                                                                  
        while(1)                                                               
        {      P3 = ~(0x01 << j++);                                                                     
                delay_ms(shu_zi);             //延时
                if(j == 8)                                                         
                {j = 0;}               
        }
}
/********************键盘*******************************/
void scan_board()
{   if(KeyIn1==0)                                   //按keyin1控制时间加0.1s显示数码管上
        {  delay_ms(20);         
                if(KeyIn1==0)  
                {  if(n >= 50)     n = 0;
                     else                n++;
                        shuzi=n;
                        shu_zi=50*shuzi;                                       
                        while(!KeyIn1);         
               }
        }
        if(KeyIn2==0)                                        //按keyin2控制时间减1s显示数码管上
        {
                delay_ms(20);         
                if(KeyIn2==0);
                {
                        if(n<= 0)
                                n = 50;
                        else
                                n--;
                        shuzi=n;
                        shu_zi=50*shuzi;                                
                        while(!KeyIn2);
                }
        }               
        if(KeyIn3==0)
        {
                delay_ms(20);         
                if(KeyIn3==0);
                {
                        led_1();                              //按keyin3键流水灯亮
                        while(!KeyIn3);
                }
        }                        
}

void timer1_init()                    
{
。。。。。。。。。。。。。。。。。。。《省略》                          
}        
void main()                        
{        
        KeyOut1 =0;                                           //键盘初始化
        ENLED1 = 0;ADDR3 = 1;                 
        timer1_init();
        while(1);                                      
}
void interrupt_timer1() interrupt 3               
{      TH1 = 0xFC;                                                
        TL1 = 0x67;
        counter++;                                                                                                
        if(5 ==counter)                                                                          
        {
                counter = 0;
                scan_board();
                a[0] = shuzi%10;                          
                a[1] = shuzi/10%10;
        }
                refresh_led();                                                         
}

程序功能是:通过按键来改变流水灯间隔的时间,要求间隔时间在0.1S到5S可调,并同时显示在数码管上(2个数码管)。
现在程序可以实现时间在0.1S到5S 可调,可按KeyIn3控制流水灯开始,但问题是:流水灯与数码管不同时显示(有时流水灯工作,只显示一个数码管不是同时显示2个数码管),我想了很久也没找出原因,麻烦各位帮我找找原因(或者改进程序)?非常感谢!!

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-11-21 16:17:05 | 显示全部楼层
因为流水灯函数里有个while(1)

出0入0汤圆

 楼主| 发表于 2012-11-21 19:05:57 | 显示全部楼层
lcw_swust 发表于 2012-11-21 16:17
因为流水灯函数里有个while(1)

谢谢!!!!!!!

出0入0汤圆

发表于 2012-11-21 19:14:20 | 显示全部楼层
要学会用定时中断

出0入0汤圆

发表于 2012-11-21 21:15:54 | 显示全部楼层
建议你使用一个不可剥夺性的OS来控制,实行多任务操作。这样会比较方便一点。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-26 16:05

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

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