hoodlum1980 ( 發發 ) 的技术博客

——ZJU: 百十载,求是魂,求是创新(领域:ASM, C/C++, C#, .NET, .NET CF, WINCE,MATLAB,PHOTOSHOP,数字图像处理,电力系统自动化,继电保护)
posts - 48, comments - 54, trackbacks - 0, articles - 1

这本来是我在大三时期做的一个题目,属于课外习题。题目是这样的,在单片机课程中,有一个实验是控制数码管显示一个时钟。程序逻辑非常简单,可以用如下的伪码表示。
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





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-09-18 18:29 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: