一个经典的控制Led的单片机程序

这本来是我在大三时期做的一个题目,属于课外习题。题目是这样的,在单片机课程中,有一个实验是控制数码管显示一个时钟。程序逻辑非常简单,可以用如下的伪码表示。
while(true)
{
    累加ms时间并进位;
    if(ScanKeys(&code))
        ProcessKey(code);         //处理按键
     Display() ;                            //刷新数码管显示
}

上面的逻辑是凭借记忆,并且实际上是使用8051汇编语言编写,控制6个Led7段式数码管。把显示码输出到某个port或者某个外设去控制数码管显示。其中时分秒存储在存储单元。按特定键可以调节时钟的时分秒的数值。

这部分的代码在书上已经有了。老师的课外题目是这样的,他说可以尝试去做调节时间时,相应数据位闪烁。以及屏保能功能。最终我是我们专业唯一做出这个程序的(当然也是因为很少有人尝试去做该题),我做的动态屏保效果(灵感来自霓虹灯的闪烁)还出乎了老师的预料。记得当时我很快就画出了详细流程图,在此基础上很快写出了主要函数代码。然后由于两周才能有上机机会,经过漫长焦急而激动的等待。直到我在电脑上输入完所有写好的代码,简单调试后成功运行并看到预期的最终效果。

我在草稿纸上绘制了整洁清晰的流程图,并引入了一个状态变量放在内部寄存器,通过这个变量,我记录当前程序所处的状态,是闪烁,屏保,还是正常显示。然后根据相应状态以及特定的时间,在Display函数中输出不同的显示控制码。

多年以后,我查看自己做过的Led控件,忽然萌生把那个单片机程序重新实现在winform的想法,以为难度不大,但是由于状态较烦琐,还是花了一点时间去调试。

效果截图:

源码下载地址:(vs2005)
http://files.cnblogs.com/hoodlum1980/LedTest_02(vs8).rar

时间: 2024-10-29 14:15:47

一个经典的控制Led的单片机程序的相关文章

编写一个单片机程序,通过一个钮子开关K1控制八只发光二极管的两种不同状态。

问题描述 编写一个单片机程序,通过一个钮子开关K1控制八只发光二极管的两种不同状态. 用AT89C51来完成实验.要求:1.使用P3口作为信号输入口,P1口作为信号输出口.2.若开关节K1接高电平时,八只二极管均处于点亮状态,并持续10秒,开关接低电平时,八只二极管处于交叉两灭状态,并持续5秒3.编写程序的首地址设为4000H. 解决方案 你这个是上课作业吧? 解决方案二: 要用汇编写程序啊...头痛..很久没用汇编了.. 解决方案三: 先画好流程图,用C语言编好程序,用keil编译,通过后就把

lpc1768-用串口接收字符为命令来控制LED灯,该怎么写程序?(LPC1768)

问题描述 用串口接收字符为命令来控制LED灯,该怎么写程序?(LPC1768) 用串口助手发送特定字符来控制LED的亮灭?? 或者给个思路吧!核心的代码写一点也好啊! 有没有大神帮忙把控制部分的程序写下,谢谢啦!刚开始学,请教啊! 解决方案 继电器应该有自己的串口命令吧,你发命令就行了 解决方案二: 买来继电器后 会给你接口的 解决方案三: 单片机接收字符,然后判断,然后使能对应的LED

蓝牙模块控制LED灯的简单程序

问题描述 蓝牙模块控制LED灯的简单程序 怎么实现手机和蓝牙模块的通信,手机发送的值是SBUF吗,直接用就可以吗.我想用数字0控制灯灭,手机只要发送一个0吗,SBUF=0? 解决方案 http://www.dzsc.com/data/2014-9-26/106862.html 解决方案二: 看我博客!有详细说明......

dsp-DSP2812的GPIO口如何操作?设计一个控制LED闪烁的C语言代码

问题描述 DSP2812的GPIO口如何操作?设计一个控制LED闪烁的C语言代码 DSP2812的GPIO口如何操作?设计一个控制LED闪烁的C语言代码?多谢大神指点,新手,详细点好 解决方案 印象中不同的板子GPIO口略不一样,你得对照着每个口的功能去写.不过这些都是大同小异的.这个是我大三上专业必修微机原理里的一个ARM实验,当时做的还是蛮有意思.后来有一套答案的总结,做出来了,可能对你有一定参考价值吧.附上链接:arm流水灯实验 解决方案二: 看看这个 http://www.eeboard

频率设置-单片机程序,频率控制

问题描述 单片机程序,频率控制 给出八位有效数字,例如10110101,怎么编程,让1的时候单片机以90Hz频率点亮一个led,对应0的时候以96Hz频率点亮同一个led,哪位大神之前搞过类似的程序?谢谢了! 解决方案 http://wenku.baidu.com/link?url=YbNmcZGOttHzzoHA117D1G6tr1KXREJlJbE0s2mm02K5xOHCA_tYmru0Df2Vr65GTkMbozYmHl4mU_bpP8TQB6ogmS4edtfAqzwh7_JRDYq

LPC2124--GPIO按键控制LED灯的闪烁

实例目的 实例目的:掌握Proteus软件的使用及调试方法,学习IO编程. 实例内容:  学习使用Proteus.ADS.Keil for ARM软件,掌握绘制原理及编译程序.  键盘输入,当检测到有按键输入时,对发光二极管进行取反控制.使用 I/O口输入方式对按键进行扫描. 实例步骤:  在Proteus中绘制原理图.  在Keil for ARM中输入程序,并编译通过.  加载ELF程序,观察仿真结果.  采用KEIL for ARM与PROTEUS的整合方式联调. 知识点概括

PHP经典的给图片加水印程序

程序   如果对PHP的GD库比较熟悉,看懂这篇文章一点都不难了!   <?php   /******************************************************************************      参数说明:   $max_file_size : 上传文件大小限制, 单位BYTE   $destination_folder : 上传文件路径   $watermark : 是否附加水印(1为加水印,其他为不加水印);      使用说明:

biff8-求助,写一个VFP直接读写EXCEL二进制文件的程序,求教EXCEL文件格式。

问题描述 求助,写一个VFP直接读写EXCEL二进制文件的程序,求教EXCEL文件格式. 在用VFP读写EXCEL文件数据时,当遇到非标准的EXCEL文件或高版本的EXCEL文件,VFP就会出错.这时通过调用第三方软件转换以后就可以使用了.但是在WINDOWS 7以上,系统会阻止VFP调用第三方软件.只有打开EXCEL文件直接读写数据了. 在网上查了一些资料,但是对EXCEL文件的结构和读写的方法还不明白,求助高人指点一下.目前只能读取和解析文件头,试着读出了扇区列表,目录读取不正确,其他还不会

c语言-关于C语言编译C51单片机程序的一点疑问

问题描述 关于C语言编译C51单片机程序的一点疑问 1.为什么两段不相干的代码会互相影响 在主程序里有一段点亮发光二极管的代码,和一段计数器计数并在数码管上显示的代码.同时工作时,二极管正常点亮,数码管几秒才点亮一回,而且十位显示是闪烁一下就不显示了2.数码管显示时,位选和段选顺序不能改变吗?按照书上的方法是先段选再位选,但是点亮的数码管是本来不应该点亮的,段选和位选顺序换了之后就能正常显示了 解决方案 问题1)你所谓的同时工作是指led亮的同时数码管也在显示,是这样的吗?单片机跑的程序都是单线