打印

有空的各位大侠,帮我看看这个程序。

[复制链接]
1581|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
灬风停了|  楼主 | 2011-5-9 19:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ui, TE, se, rc, FOR
//共阴数码管74HC164串行驱动      
#include<reg52.h>   
#define uint unsigned int      
#define uchar unsigned char      
sbit DAT=P3^7; //模拟串口数据发送端      
sbit CLK=P3^4;//模拟时钟控制端   
sbit k1=P3^6;  
uint count,flag,flag1;
uint m,i;
uint t,tt;
uint a,b,s1;  
uchar code tab[]={0xdf,0x45,0xaf,0xed,0x75,0xf9,0xfb,//.0-.9
0x4d,0xff,0xfd};   
uchar code tab1[]={0xde,0x44,0xae,0xec,0x74,0xf8,0xfa, // 0-9
0x4c,0xfe,0xfd};
uchar code tab2[]={0xde,0x7e,0x3a,0xd6,0x32,0x64,0x70,0x26,0xaa,0xac,
0xae,0x64,0xae,0x8e};//0,A,F,U,X,Y,Z,Z+1.Z+2      
void sendbyte(uchar byte)      
{        
        uchar num,c;   
        num=tab2[byte];   
      for(c=0;c<8;c++)      
       {   
           CLK=0;      
           DAT=num&0x01;      
           CLK=1;      
           num>>=1;        
       }            
}     
void delay(uint z)
{
     uint x,y;
     for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}                        
void display(uchar b,uchar a)
{  
sendbyte(a);     
delay(58);
    sendbyte(b);
}  
void keyscan()/*键盘扫描程序*/
{
   if(k1==0)
   {
      delay(20);
      if(k1==0)
      {
              s1++;      
              if(s1==1)
              {   
                 while(1)
                {  
                      display(1,2);
                      delay(500);
                      sendbyte(tab2[10]);
                      delay(58);
                      sendbyte(tab2[10]);
                      delay(500);
                      tt++;
                      if(tt<=20)
                      {
                        if(s1==2)
                        {
                          s1=0;
                          tt=0;
                          while(1)
                          {  
                            display(2,3);
                            delay(500);
                            sendbyte(tab2[10]);
                            delay(58);
                            sendbyte(tab2[10]);
                           delay(500);
                            tt++;
                           if(tt==20)
                          {
                                   while(1)
                                 {
                                       tt=0;                           
                                      display(3,2);
                                 }     
                           }
                      }
                 }
            
               }
           
                if(tt==20)
                 {
                        while(1)
                       {
                              tt=0;
                              flag=0;
                               display(2,1);
                         }
                   }
            }
       }         
      }
   }           
}         
void main()
{
     display(0,1);
     while(1)
  {
        keyscan();
  }
}
      这个程序是实现按键控制数码管的闪烁显示。按键控制程序里面,在while循环里面实现数字闪烁20次后就稳定下来,我想在闪烁20次之间用按键控制闪烁数字的变化。也就是说如果刚才第一次按按键时闪烁“AF”,那么在按一下就闪烁"UF,可是UF就不出来,一直都是AF,就是红色的程序执行不了。我想我的红色的程序应该可以执行的啊,但是仿真时不执行。有空的帮我看看啦,谢谢了。

相关帖子

沙发
jtboy105| | 2011-5-9 21:28 | 只看该作者
你写的程序太牛了,呵呵,搞不清楚。
其实正常的程序,不会进这么多层的,再说看你while(1),好像就没有Break呀,你怎么出来?
写程序,最好用并行方式,多写几个子函数,这样程序更清楚,更好找BUG

使用特权

评论回复
板凳
灬风停了|  楼主 | 2011-5-10 08:00 | 只看该作者
2楼的,受教了。

使用特权

评论回复
地板
ayb_ice| | 2011-5-10 08:20 | 只看该作者
很NB的程序

使用特权

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

本版积分规则

0

主题

16

帖子

0

粉丝