2282|3

84

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

初学单片机,遇到定时器流水灯问题。 [复制链接]

#include
#include
#define uchar unsigned char
#define uint  unsigned  int
uchar temp;
uchar tt,idelay,i=0,kk=0,pp=2;
void main()
{
    TMOD=0X01;
        EA=1;
        ET0=1;
        TR0=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
    temp=0xFE;
        P0=temp;
        while(1)
        {         
           while(1)
        {         
            if(idelay > 0)
                {  
             idelay = 0;
             kk++;
          if(kk == 8)
              {
              kk = 0;
              pp++;
           }
        if (pp % 2 == 0)                //????????×????????±kk=8???±?ò??pp??1?ó??1?????ú×?????×?else????????
               temp = _crol_(temp, 1);
      
           else  
               
                 temp = _cror_(temp, 1);    //?±kk=8???ópp=1,??×?????±????????±????8???ó??pp????1????2??????????????
             P0 = temp;       
                         
        }
    }
}

}

void timer0()   interrupt  1
{

        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
    tt++;
        if(tt==10)

        {        tt=0;
            idelay=1;

        }
} 具体循环式 0 0 0 0 0 0 0 0(右移)
          0  0 0 0 0 0 0 0 (左移)都是对的,但是在最后一次移动到最左的时候,最右边1个灯亮一下,  然后再从左边开始向右移,每次都会发生一次
说明P0口控制流水灯。

最新回复

你试试这个 #include #include #define uchar unsigned char #define uint  unsigned  int uchar temp; uchar tt,idelay,i=0,kk=0,pp=2; void main() {         TMOD=0X01;         TH0=(65536-50000)/256;         TL0=(65536-50000)%256;         EA=1;         ET0=1;         TR0=1;     temp=0xFE;         P0=temp;   while(1)         {             if(idelay > 0)                 {                 idelay = 0;                         if (pp % 2 == 0){                             temp = _crol_(temp, 1);                      }else {                                 temp = _cror_(temp, 1);                         }                         P0 = temp;                                                 kk++;                         if(kk==7){                                 pp++;                                 kk=0;                         }                      }//if         }//while }//main void timer0()  interrupt  1 {         TH0=(65536-50000)/256;         TL0=(65536-50000)%256;     tt++;         if(tt==10)         {                 tt=0;             idelay=1;         } }  详情 回复 发表于 2009-12-2 09:47
点赞 关注

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
还有一个函数没有给出来,应该延时一下,赋值的问题。。
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
while(1)
{
  while(1)
{
第一次见这样的程序
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
你试试这个

#include
#include
#define uchar unsigned char
#define uint  unsigned  int

uchar temp;
uchar tt,idelay,i=0,kk=0,pp=2;
void main()
{
        TMOD=0X01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
    temp=0xFE;
        P0=temp;

  while(1)
        {
            if(idelay > 0)
                {
                idelay = 0;
       
                if (pp % 2 == 0){
                            temp = _crol_(temp, 1);
                     }else {
                                temp = _cror_(temp, 1);
                        }
                        P0 = temp;
                       
                        kk++;
                        if(kk==7){
                                pp++;
                                kk=0;
                        }
       
             }//if
        }//while
}//main

void timer0()  interrupt  1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
    tt++;
        if(tt==10)
        {
                tt=0;
            idelay=1;
        }
}
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表