理学与信息科学学院
微 机 接 口 课 程 设 计 报 告
设 计 题 目 点阵LED屏显示设计 学生专业班级 计算机科学与技术2013级02班 学生姓名(学号) 赵世飞(20133739) 设计小组其他同学姓名(学号) 唐辉(20133649) 于晨(20133701) 指 导 教 师 李绍静 完 成 时 间 2016年04月14日 实 习(设计)地点 信息楼526 年 4 月 16
2016 日
一、课程设计目的和任务
利用点阵LED屏向上卷动显示“青岛农业大学”;
熟悉Keil软件和STC-ISP-v4.80软件的使用,微机原理实验箱及其开发环境;
查阅点阵LED屏的工作原理,如何获取图形,结合原理图了解芯片如何驱动点阵LED屏工作,了解LED点阵的基本结构,学习LED点阵的扫描显示方法。 二、分析与设计
1.设计任务分析:实验系统中的16*16LED点阵由四块8*8LED点阵组成,点阵中对应点的正、负极为“1”、“0”时,该灯点亮。
2.设计方案论证:16*16LED点阵行线为阳极线,列线为阴极线,显示时采用按行扫描,从第0行开始逐行赋值“1”,同时用2个字节控制16列的阴极端,使指定小灯发光。
3.硬件设计及原理图:
点阵LED单元原理图
点阵LED显示实验接线图
4.程序流程图和源代码清单:
NO NO NO 开始 变量定义 清屏 消隐 0-7行显示程序 j < 8 YES 消隐 8-15行显示程序 j < 8 YES Count += 2; Count==224-32 YES Count = 0; 程序流程图
/*头文件hzdot.h*/
unsigned char code hzdot[224] = {
0x80,0x00,0x80,0x00,0xFC,0x1F,0x80,0x00, 0xF8,0x0F,0x80,0x00,0xFF,0x7F,0x00,0x00, 0xF8,0x0F,0x08,0x08,0xF8,0x0F,0x08,0x08, 0xF8,0x0F,0x08,0x08,0x08,0x0A,0x08,0x04,//青
0x40,0x00,0x20,0x00,0xF8,0x0F,0x08,0x08, 0x28,0x08,0xC8,0x08,0x48,0x0A,0x08,0x04, 0xF8,0x3F,0x20,0x20,0x20,0x20,0x22,0x22,
0x22,0x22,0xFE,0x23,0x00,0x14,0x00,0x08,//岛
0x40,0x00,0xC0,0x00,0x40,0x20,0xFC,0x7F, 0x44,0x20,0xA2,0x10,0xA0,0x08,0x30,0x1D, 0x18,0x05,0x14,0x02,0x12,0x04,0x11,0x0C, 0x90,0x18,0x50,0x70,0x38,0x10,0x10,0x00,//农
0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x22, 0x22,0x62,0x24,0x32,0x24,0x12,0x28,0x0A, 0x38,0x0A,0x28,0x06,0x20,0x02,0x20,0x02, 0x20,0x22,0xFF,0x7F,0x00,0x00,0x00,0x00,//业
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00, 0x80,0x00,0xFF,0x7F,0x80,0x00,0x40,0x01, 0x40,0x01,0x40,0x02,0x20,0x02,0x20,0x04, 0x10,0x08,0x08,0x18,0x04,0x70,0x02,0x20,//大
0x80,0x10,0x08,0x31,0x30,0x13,0x10,0x09, 0xFE,0x7F,0x02,0x20,0xF1,0x17,0x00,0x02, 0x00,0x01,0xFE,0x7F,0x00,0x01,0x00,0x01, 0x00,0x01,0x00,0x01,0x40,0x01,0x80,0x00,//学
0x80,0x00,0x80,0x00,0xFC,0x1F,0x80,0x00, 0xF8,0x0F,0x80,0x00,0xFF,0x7F,0x00,0x00, 0xF8,0x0F,0x08,0x08,0xF8,0x0F,0x08,0x08, 0xF8,0x0F,0x08,0x08,0x08,0x0A,0x08,0x04,//青 };
/*程序源代码*/
#include
#define Row1 XBYTE[0xef00] #define Row2 XBYTE[0xdf00] #define Col1 XBYTE[0xbf00] #define Col2 XBYTE[0x7f00] void Delay(void) { unsigned char i; for(i=0;i<60;i++); }
void clear(void)//清屏 { Row1 = 0x00; Row2 = 0x00;//行(阳极端) Col1 = 0xff;
Col2 = 0xff;//列(阴极端) }
void main(void) { unsigned char Scan = 0x01,i,j; unsigned int count = 0; clear(); while(1) { for(i=0;i<50;i++) { for(j=0;j<8;j++) { Row1 = 0x00; Col1 = ~hzdot[count]; Col2 = ~hzdot[count+1]; count += 2; Row1 = Scan; Scan = (Scan<<1)|(Scan>>7); Delay(); } Row1 = 0x00; for(j=0;j<8;j++) { Row2 = 0x00; Col1 = ~hzdot[count]; Col2 = ~hzdot[count+1]; count += 2; Row2 = Scan; Scan = (Scan<<1)|(Scan>>7); Delay(); } Row2 = 0x00; count -= 32; } count += 2; if(count == (224-32)) count = 0; } }
三、系统实施
//清屏
//0-7行 //消隐
//8-15行 //消隐
//延时
//换帧
系统实现与调试过程中遇到的主要问题分析:汉字显示时出现鬼影现象,加入消隐程序解决;最后一个文字显示完成立刻跳显第一个文字,在汉字数组最后加上第一个汉字的字模,实现连续滚屏。