打印

我有个流水的亮暗程序不明白求指教。

[复制链接]
1821|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gp418693119|  楼主 | 2012-7-10 20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AI, AN, ADDR, AD, DDR
#define Ton 40
oid Inittime()
      {
          TMOD = 0x02; //定时器0,工作方式2,自动重装
          TH0 = 256-Ton;
          TL0 = 256-Ton;
          ET0 = 1;
         EA = 1;
         TR0 = 1;
     }
//定时器0中断
     void time0() interrupt 1 using 0
      {
           Maikuan++;
      }
void main()
       {
      
             uchar i = 0,j = 0; //初始化i,j
    ENLED=0;ADDR0=0;ADDR1=1;ADDR2=1;ADDR3=1;
             Inittime();
         while (1)
           {
               //第1,3,5,7个灯半亮,其余的全亮。              
            for(i=254; i>0; i--)      
            {
                while ( Maikuan!=20)
                {
                        LED = 0x00;
                }
                while ( Maikuan!=200)
                {
                        LED = 0x55;
                }
   
               Maikuan = 0;
            }
程序我没全写上去,我就是不明白定时器初值为什么这样设定,还有i为什么从254开始--,还有 半亮和全亮,maikuan不是应该为100和200吗?我刚开始学单片机,很多不懂,虚心求教。

相关帖子

沙发
NE5532| | 2012-7-10 20:46 | 只看该作者
先不要学人家翻花样,老老实实用最简单的方法来写,把原理弄懂了再翻。这种写法不过是多了几个表达式而已,效果跟最简单的写法一样!

使用特权

评论回复
板凳
ayb_ice| | 2012-7-10 20:55 | 只看该作者
这个主循环写的并不可靠

使用特权

评论回复
地板
gp418693119|  楼主 | 2012-7-10 20:59 | 只看该作者
2# NE5532 恩 好的、

使用特权

评论回复
5
wukunshan| | 2012-7-10 21:50 | 只看该作者
1.定时器初值这样设定的目的是为了方便更改定时时间,只要在宏定义里更改Ton值就可以了。
2.for循环里i的值可以从任意值开始。
3.在这个程序里,先是8个等全亮(LED=0x00),定时器中断20次后,2、4、6、8亮1、3、5、7个灭(LED=0x55),定时器中断200-20=180次后又从头开始。可见2、4、6、8亮的时间比1、3、5、7亮的时间长,所以看起来2、4、6、8亮度比1、3、5、7高。
4.在这个程序里,maikuan值作为计数变量,用来计数定时中断的次数,从而控制LED赋值的时间,这是一种笨拙的方法。相比之下,楼主的思路要高明得多。

使用特权

评论回复
6
gp418693119|  楼主 | 2012-7-10 22:00 | 只看该作者
5# wukunshan
谢谢这位仁兄的详细解释,明白了 。

使用特权

评论回复
7
joyme| | 2012-7-10 23:28 | 只看该作者
这个for循环没什么用

使用特权

评论回复
8
fjzzclc| | 2012-7-13 16:26 | 只看该作者
学习了

使用特权

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

本版积分规则

1

主题

84

帖子

0

粉丝