基于AVR的LED数字大屏幕的设计与实现
发布时间:2008/5/26 0:00:00 访问次数:616
    
    
    作者:宋晖 高小明
    
    1引言
    
    led显示屏是八十年代后期在全球迅速发展起来的新型信息显示媒体,应用越来越广泛。atmega16l单片机是一款基于avr risc 的、低功耗cmos 8 位单片机,具有16k字节的自编程flash, 512字节的eeprom, 1k字节的sram, 通过avr单片机来控制led的显示,结构简单,应用灵活,并且易于扩展。
    
    2 系统设计原理
    
    2.1 编码设计
    
    编码设计有两个过程:字库提取以及字模编码转换。字库的提取涉及到的两个字库文件,一个为asc16,专门存放ascii编码;另一个为hzk16,专门存放汉字字库编码。要提取字库,首先要对它进行初始化,即打开字库。然后根据一个字符提取它相应的编码。首先取出字符的内码后(注意区分单字节和双字节的内码),接着通过内码得到该字符对应的字模的编码在ascii或hzk16内的偏移量,最后就可以根据这个地址在文件中的偏移位置找到相应的字模编码,我们可以通过这个公式来计算:
    
    在ascii中,偏移量=(内码的低地址)*16,
    
    在hzk16中,偏移量= ((内码的高地址-161)*94 + (内码的低地址-161))*32。
    
    此时得到的字模编码不是最终所要的编码(单字节数据如英文是按8*16点阵来显示,而双字节数据时如汉字是按16*16点阵来显示的)。这里统一使用8*16点阵,这就需要对其转换。下图左表格表示的是汉字编码在字库内存放顺序,右表格表示的是经过转换过后的编码存放顺序。编码转换过程如图1所示:
    
    
    
    图1 编码转换
    
    2.2 矩阵转换移位算法
    
    矩阵转换移位算法目的就是如何把这些原始的数据转换成串行的数据, 以便把数据正确的输入到74hc595。原始的数据必须要对其转换。下面为它的算法实现。
    
    for(m=0;m<8;m++) //m表示的是第几个led
    
     {? for(j=0;j<8;j++) //j表示的是某个led的第几排数据
    
     {? for(i=0;i<8;i++) //i表示的是取某个led的第某排数据的第几位
    
     { displayport_a[m][j]|=((displaycode_a[i][m]&0x01)<
    
     displaycode_a[i][m]=displaycode_a[i][m]>>1;
    
     // displayport_a[m][j]表示存放已转换好数据
    
     // displaycode_a[i][m]表示存放的是原始数据
    
    //‘|’表示相或,‘&’表示相与,‘<<’表示左移
    
    }
    
    }
    
    }
    
    2.3 上位机和下位机的通信
    
    上位机和下位机的通信主要是通过rs232接口进行的,对于上位机的数据传输的速率为9600bps。为了便于数据的传输和接收,可以给要传输数据的前后加上标志位。如果数据发送量大,在发送数据时还可采用线程的方式来发送。而下位机接收数据则可采用单片机内全双工的通用异步收发器(uart)来进行。
    
    uart有中断和查询两种工作方式,uart初始化需要设置相关几个控制寄存器,我们可以把uart几个控制寄存器的初始化情况表示出来:
    
    ucr = 0x00 设置波特率时要先关闭uart
&n
    
    
    作者:宋晖 高小明
    
    1引言
    
    led显示屏是八十年代后期在全球迅速发展起来的新型信息显示媒体,应用越来越广泛。atmega16l单片机是一款基于avr risc 的、低功耗cmos 8 位单片机,具有16k字节的自编程flash, 512字节的eeprom, 1k字节的sram, 通过avr单片机来控制led的显示,结构简单,应用灵活,并且易于扩展。
    
    2 系统设计原理
    
    2.1 编码设计
    
    编码设计有两个过程:字库提取以及字模编码转换。字库的提取涉及到的两个字库文件,一个为asc16,专门存放ascii编码;另一个为hzk16,专门存放汉字字库编码。要提取字库,首先要对它进行初始化,即打开字库。然后根据一个字符提取它相应的编码。首先取出字符的内码后(注意区分单字节和双字节的内码),接着通过内码得到该字符对应的字模的编码在ascii或hzk16内的偏移量,最后就可以根据这个地址在文件中的偏移位置找到相应的字模编码,我们可以通过这个公式来计算:
    
    在ascii中,偏移量=(内码的低地址)*16,
    
    在hzk16中,偏移量= ((内码的高地址-161)*94 + (内码的低地址-161))*32。
    
    此时得到的字模编码不是最终所要的编码(单字节数据如英文是按8*16点阵来显示,而双字节数据时如汉字是按16*16点阵来显示的)。这里统一使用8*16点阵,这就需要对其转换。下图左表格表示的是汉字编码在字库内存放顺序,右表格表示的是经过转换过后的编码存放顺序。编码转换过程如图1所示:
    
    
    
    图1 编码转换
    
    2.2 矩阵转换移位算法
    
    矩阵转换移位算法目的就是如何把这些原始的数据转换成串行的数据, 以便把数据正确的输入到74hc595。原始的数据必须要对其转换。下面为它的算法实现。
    
    for(m=0;m<8;m++) //m表示的是第几个led
    
     {? for(j=0;j<8;j++) //j表示的是某个led的第几排数据
    
     {? for(i=0;i<8;i++) //i表示的是取某个led的第某排数据的第几位
    
     { displayport_a[m][j]|=((displaycode_a[i][m]&0x01)<
    
     displaycode_a[i][m]=displaycode_a[i][m]>>1;
    
     // displayport_a[m][j]表示存放已转换好数据
    
     // displaycode_a[i][m]表示存放的是原始数据
    
    //‘|’表示相或,‘&’表示相与,‘<<’表示左移
    
    }
    
    }
    
    }
    
    2.3 上位机和下位机的通信
    
    上位机和下位机的通信主要是通过rs232接口进行的,对于上位机的数据传输的速率为9600bps。为了便于数据的传输和接收,可以给要传输数据的前后加上标志位。如果数据发送量大,在发送数据时还可采用线程的方式来发送。而下位机接收数据则可采用单片机内全双工的通用异步收发器(uart)来进行。
    
    uart有中断和查询两种工作方式,uart初始化需要设置相关几个控制寄存器,我们可以把uart几个控制寄存器的初始化情况表示出来:
    
    ucr = 0x00 设置波特率时要先关闭uart
&n
上一篇:多路端口可编程霓虹灯及彩灯控制器
热门点击
- 8051单片机家族数据手册链接大全
- dsPIC30F6010单片机的原理及应用
- 一种通用的嵌入式系统ISP方法
- 浮点数保存代码
- 基于FPGA/CPLD和USB技术的无损图像
- 数字显示器仍需处理模拟信号
- 常用PIC系列8位单片机芯片引脚符号的功能
- PIC系列单片机的伪指令
- 利用单片机PWM信号进行舵机控制
- 产生低失真正弦波的CMOS六角反相器
推荐技术资料
- 硬盘式MP3播放器终级改
- 一次偶然的机会我结识了NE0 2511,那是一个远方的... [详细]