蔬木果的个人空间 https://bbs.21ic.com/?2602148 [收藏] [复制] [RSS]

日志

单片机课程设计之呼吸灯学习过程

已有 316 次阅读2018-7-1 18:58 |个人分类:51单片机|系统分类:兴趣爱好

        学校最经开始了一个课程设计,我根据老师的要求最终决定做一个呼吸灯的驱动程序。
        我先是参考了郭天祥的《手把手教你学单片机》的呼吸灯程序,实现了LED灯的呼吸闪烁,但是这并不是我想要看到的结果,我希望看到的是几个灯呼吸灯的频率不一样。
于是我仔细观察代码,根据代码我知道了呼吸灯实现的关键在于计数器的数量。一个频率的呼吸灯实现需要两个定时器,在我得到的例程中0定时器实现高低电平的反转,1定时器实现占空比的变化。根据这样的理解,我认识到定时器的数量决定着呼吸灯可实现呼吸频率的数量。可是51单片机内部只有两个定时器,只能实现一种呼吸频率的变化,远没有到达我的目标(实现3个呼吸频率不一样灯的设计)。所以我就将眼光引向了其他类别的单片机,其中的stc12c5a60s2含有两路PWM/PCA输出,同时拥有两个计数器,并且计数器完全兼容51的计数器。最终我选择了这一款芯片,预先设计是用两个计数器做一路频率,然后一路用PCA做不同的PWM波形,这样理论上可以实现三路不同频率的输出。
        在实现的时候,我就是简单的将呼吸灯的程序和PCA调整波形的程序简单的整合到一起,执行语句一齐放在一个while(1)语句中,可是产生的现象时只能通过按键对PWM波形的调节,
呼吸灯的现象没出来,我仔细观察了程序,发现是程序设计上存在问题,两个执行语句应该是条件发生的,但是我就这样使用了顺序语句,使单片机只能执行一条命令,后来我查阅资料,
想到了有可能是程序的结构问题,但是我自己觉得结构方面的东西自己没有学过,所以我就停在那里了。直到最近我想到了可以用设置条件语句来判断语句的执行与否,
这样就可以在一定条件下,同时执行两条命令,于是我定义了一个全局变量,放在了按键调控程序中,这样当按键按下时,就会因为条件不满足,而转去执行另外一条命令,
这样就可以实现两条命令的转换。可是这样现象并没有出来,后来我又尝试着将按键设置为中断触发,将脉冲变化函数写入中断中,可是依旧没有出现现象,我暂时没有想好怎么解决这一问题,
只好把问题保留,等到以后再次去解决。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)