原创 牛年单片机学习日记--PWM波练习

2009-2-16 20:37 6446 6 9 分类: MCU/ 嵌入式

Mon Feb 16 2009                  小雨


   今天在图书馆借了几本关于单片机和Protel等专业方面的书icon,又在图书馆埋头苦读了一天,现在虽然有点累,不过还是很有收获的icon,很多东西突然又记起来了,呵呵icon,原来俺这宝刀还未老呀icon


   虽然学习得一步一步的来,但是更要讲技巧,不然只能是事倍功半,呵呵,今天先复习一下理论知识,每天进步一点点,俺相信俺能行……


  今天看了看定时器,好的就练习一下定时器,顺便再把独立键盘也写上了,主要设计的思路是用定时器2定时设置频率在P2.0口输出PWM波调节占空比就可以控制LED有亮度,可是由于proteus仿真不出亮度,结果我把LED的正负极反过来接,就只能在仿真界面上看在闪烁了,呵呵……不过这也不错,毕竟能看到结果了……


 


点击看大图


   这次用的是AT89S52单片机,下面是俺的小程序:


#include <reg52.h>     


#define uchar unsigned char
#define uint  unsigned int
 
sbit LED10 = P2^0;          //要控制的LED 灯
sbit K1= P3^2;              //按键K1
 
uchar scale;     //用于保存占空比的输出0 的时间份额,总共10 份
 
void initial();
/*************************************************/
/*      主程序                                      */
/*************************************************/


void main(void)       
{
        uint n;
  initial();               
        while(1)  
        {       ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作
  
   if(!K1)      //如果读到K1 为0
                {
                  for(n=0;n<1000;n++); //等待按键稳定
                  while(!K1);     //等待按键松开
                  for(n=0;n<1000;n++);    //等待按键稳定松开
 
          //for(n=0;n<50000;n++); //每过一会儿就自动加一个档次的亮度
                 scale++;
                 if(scale==10)scale=0;
     }     
        }
}


/***********************************************/
/*        初始化子程序               */
/***********************************************/


void initial()
{
    RCAP2H =0xF3; //赋T2 的预置值,溢出1 次是1/1200 秒钟
    RCAP2L =0x98;     
    TR2=1;          //启动定时器
    ET2=1;          //打开定时器2 中断
    EA="1";  
}


/*************************************************/
/*             1/1200 秒定时器2 中断                    */
/*************************************************/


timer2() interrupt 5    
{
        static uchar tt; //tt 用来保存当前时间在一秒中的比例位置
        TF2=0;
 
        tt++;
        if(tt==10) //每1/120 秒整开始输出低电平
        {
                tt="0";
                if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影 
                LED10=0;    
        }
                
        if(scale==tt)    //按照当前占空比切换输出高电平 
        LED10=1;
                        
}


 


K1键用来控制亮度,每按一次增加一个亮度级别。


   单片机其实挺好玩的,虽然俺写的都是些小程序,不过慢慢来,俺会玩出新花样的……icon好了,明天再接着练习了,今天还得把实习报告写一写呢。

文章评论3条评论)

登录后参与讨论

用户1451253 2009-3-15 09:46

我还在学汇编,看不懂C,谢谢。

xucun915_925777961 2009-2-27 13:25

好,记住了,谢谢!

xucun915_925777961 2009-2-18 22:53

哦,我再试试。谢谢了^_^

nhfzlingyu_750476682 2009-2-17 19:51

proteus可以仿真亮度,而且就是PWM控制LED亮度的
相关推荐阅读
xucun915_925777961 2013-04-28 11:31
毕业后的五年拉开大家差距的原因在哪里?【转】
  有人工作,有人继续上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有缘人分享,也希望对有缘人有所帮助!...
xucun915_925777961 2013-03-31 20:28
职场大牛精彩总结:职场上,如何做人做事做管理【转】(文/张子阳)
      大道至简,越是根源和基本的问题,道理实际上越简单。关于如何做人、做事、做管理的书很多,我看得不多,但是我觉得这些书更多是侧重技术和实现细节上的,而很少从人的思想和观念去讲。实际...
xucun915_925777961 2013-03-28 14:03
介绍几种优秀的UML工具
统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言...
xucun915_925777961 2013-03-27 18:05
IAR EW FOR 8051 修改工程名称的方法
        近段时间一直在搞蓝牙4.0的开发任务,所以用到了IAR编译器,话说IAR编译器用途蛮广,可以编译MSP430,ARM,还有TI的51核芯片,当然,这要不同的版本,我现在用的是for...
xucun915_925777961 2013-03-26 16:40
Cortex-M3学习日志(八)-- TFT实验Part(a)
    自己用的LPC1768的开板带有一块2.4寸的TFT彩色液晶屏,虽然自己工作中还用不过显示屏,但是晚上闲着也是闲着,于是继续玩咱的LPC1768吧。 我的开发板上的液晶屏的用的是SPI接口,当...
xucun915_925777961 2013-03-25 20:48
说说那几款查看源代码的工具
说说那几款查看代码的工具 今天给大家介绍几款单片机工程师所喜欢的几款查看源代码的工具,这几款工具在懒猫的日常工作中可是帮了不少忙。 一、 Source Insight     Source Insig...
我要评论
3
6
关闭 站长推荐上一条 /2 下一条