这本来是我在大三时期做的一个题目,属于课外习题。题目是这样的,在单片机课程中,有一个实验是控制数码管显示一个时钟。程序逻辑非常简单,可以用如下的伪码表示。
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
相关文章
- 03-14编写Python程序,通过python控制台输入一个大于1的整数n,然后产生一个二维列表。二维列表的尺寸是n*n.每一个列表元素的值从1到n*n,依次排列,例如:输入的整数是3,会产生如下二维列表【【
- 03-14手机通过蓝牙和单片机通讯控制乐高车模的LED灯
- 03-14单片机学习(二)开发板LED灯的控制
- 03-14VC++ 控制外部程序,向外部程序发送一个消息的方法
- 03-14SendMessage发送WM_COMMAND消息控制另一个程序的某一个按钮
- 03-14一个关于小程序与单片机的通信实例(TCP/IP)
- 03-14基于51单片机的按键控制led,按键消抖与检测是否松键
- 03-14编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。
- 03-1451单片机的直流电机PWM调速控制系统(附Proteus仿真+C程序等全套资料)
- 03-14树莓派从入门到入魔13/100 - Pico上的第一个Hello LED程序