单片机实习报告——点阵的动态显示
当出现静态笑脸图案时,可以操作键盘,键盘按下时,会听到蜂鸣提示音。此时按下第一个或第二个键,分别显示向左和向上的“小”“石”“山”“庄”和一个笑脸的滚动字幕的显示,当再次出现静态的现笑脸时,按下第三个或第四个键,分别降低和提高字幕滚动的速度。然后,可以再次按下第一个或第二个键,来检测改变速度后字幕滚动的效果。
二、硬件原理即实现
有关部分的电路图如下:

有关部分电路说明:
点阵显示部分:CPU的P0.0~P0.7口接8*8LED点阵的COM1~COM8端,控制点阵行的显示;P2.0~P2.7口通过74HC573接8*8LED点阵的RED1~RED8,存放点阵每行显示的数据。从程序中获取数据后控制点阵的显示。COM端为0,表示该行可能亮起;RED端为1,表示某行该列亮。
按键实现部分:CPU的P3.2~P3.5口分别接KEY1~KEY4,用于接收从键盘输入的控制信息。KEY等于0,表示该按键按下;否则,没有按下。
蜂鸣器部分:CPU的P3.7接蜂鸣器的BEE口,用于控制蜂鸣器。低电平蜂鸣器蜂鸣,高电平安静。
一、软件原理及实现
1.整体思路
主程序用while循环执行显示和几个分支语句,实现用键盘对滚动方向和滚动速度的控制。
滚动效果原理类似动画片的原理,逐屏显示错位一行或一列的字幕,从而达到横向或纵向滚动的效果。横向滚动的实现只需将RED端的数据向右和向左移位,并将每次移位后的数据存储于中间变量中,用于显示输出。纵向滚动的实现需要循环控制输出数据的起始位置,每次循环输出的起始位置向后移一个元素,从而实现逐行向上滚动的效果。
用一个全局变量来控制滚动速度,该全局变量可以通过键盘的操作增加或减小,从而实现键盘控制速度。
程序特点:主程序分别调用子程序,子程序再调用子程序,最多达到了调用三层子程序。这样的子程序嵌套调用可以提高程序代码的重用率,同时使主程序看起来简练、清晰。例如,程序中实现向左滚动的部分调用了函数disp_moveleft函数,该函数又分别调用了adjust_moveright和adjust_moveleft函数,用于分别实现逐列显示出完整的字符和字符显示完全后,逐列左移直到全部移出。
具体的程序部分功能参见程序源代码中的注释。
2.程序大体流程图如下:

3.程序原代码如下:
#include
#include
uchar code sz[][8]={
uchar code smile[][8]={
uchar temp[8]={0};
uchar time=5;
void delayms(uchar x)
{
}
void delay()
{
}
void disp_dat(uchar x)
{
}
评论