打印

以下是一个c编写的程序。求高手解惑

[复制链接]
2022|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
211c求知|  楼主 | 2012-8-18 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
uint k,i;
sbit D1=P0^0;
sbit D2=P0^1;
sbit D3=P0^2;
sbit D4=P0^3;
sbit D5=P0^4;
sbit D6=P0^5;
sbit D7=P0^6;
sbit D8=P0^7;
void start()
{   
     int i=0;
     P0=0XFF;              
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     EA=1;
     ET0=1;
     TR0=1;
}
void main()
{  
    start();
   while(1)
   {
      if(k==40)//每两秒更换一次指示灯,共有八个指示灯
         {
           k=0;
           i++;         
         if(i==8)
         i=0;      
         }
         if(k%4==0)//每个指示灯都是每隔0.2秒闪烁一次。
         {   
           if(i==0)
           D1=~D1;      
           if(i==1)
            D2=~D2;         
            if(i==2)
            D3=~D3;         
            if(i==3)
            D4=~D4;;
            if(i==4)
            D5=~D5;
            if(i==5)
            D6=~D6;
            if(i==6)
            D7=~D7;
            if(i==7)
            D8=~D8;
         }                    
   }
}
void temer0() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
     k++;
}
//下载到51开发板上时,问题是指示灯还没有到两秒有的指示灯也亮了,同一时间有多个灯亮了。求高手指点。

相关帖子

沙发
ZG11211| | 2012-8-20 17:16 | 只看该作者
第一,从精简思维出发,不需要int整形变量,只要char字符型即可
第二,执行效率上来说if(k%4==0){
                                     switch(i) {
                                                          case 0:P0 =1;D1=~D1; break;//P0=1 清屏
                                       case 1:————————————
                                       --------------------
                                       case 7

}   
}

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
211c求知 + 1 我很赞同
板凳
wenshu20| | 2012-8-24 15:13 | 只看该作者
i和k的关系有点矛盾

使用特权

评论回复
地板
xiaozhangccit| | 2012-8-24 15:45 | 只看该作者
if(k%4==0)
{
  .....
}
这个效率上有问题,在这里面会浪费时间的,假设第一次k==4,i==0执行了第一个if(i==0)后,但并没有终止这个if(k==4),应该终止以下的if比较语句的,因为i==0后肯定不会等于其他1,2,3...这样效率降低了,浪费了时间

使用特权

评论回复
5
songhere| | 2012-8-25 23:23 | 只看该作者
这排版,啧啧。。。

使用特权

评论回复
6
雷影少年| | 2012-8-26 17:17 | 只看该作者
2楼的程序也有点问题的,你的程序应该没有闪烁的
LZ的程序只注意给关注的灯取反了,忘记在让关注的灯闪烁的同时把别的等给关掉,照成了多盏灯同时亮的结果,建议程序这样写
if(k>=40)
{
k=0;
if(k%4==0)
{
switch(i)
{
case 0: D1=~D1;
...
}
}
else P0=0;//0点亮取0xff,1点亮取0
if(++i=8) i=0;
}



使用特权

评论回复
7
211c求知|  楼主 | 2012-8-28 17:56 | 只看该作者
谢谢你,是的,每次一旦检测到了就终止往下的检测。。

使用特权

评论回复
8
211c求知|  楼主 | 2012-8-28 17:57 | 只看该作者
4# xiaozhangccit

使用特权

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

本版积分规则

0

主题

10

帖子

0

粉丝