ATMEGA16单片机LED点阵显示汉字 下载本文

内容发布更新时间 : 2024/5/3 11:18:36星期一 下面是文章的全部内容请认真阅读。

ATMEGA16单片机16*16led点阵显示汉字

On ATMEGA16 and led Application 王志斐(中色东方集团有限公司计量室)

摘要: 结合ATMEGA16的系统的设计讨论了LED点阵的应用。简要介绍了ATMEGA16的主要特性以及系统的实现, 着重给出了点陈显示的硬件及其软件流程。

关键词: ATMEGA16 ; SD41588LED(8*8)点阵; 74ls138

AVR (Advanced RISC) 单片机是ATMEL公司继AT89 系列之后推的全新配置的精简指令集RISC 的高性能8 位单片机。设计上采用低功耗的CMOS 技术, 而且在软件上支持C 高级语言及汇编语言。其中, ATMEGA16是该系列中比较有代表性的一种,文中对其在基ATMEGA16的汉字显示系统中的应用进行详实地说明。 1 ATMEGA16 简介

ATMEGA16 硬件应用Harward 结构,具有预取指令功能,使得指令可以在一个时钟周期内执行;具有120 条功能强大的指令,大多数执行为单周期,每MHz可实现IMIPS 的处理能力, 芯片外封装(PDIP)如图1 所示。其主要特点如下:

? 高性能、低功耗的 8 位AVR? 微处理器 ? 先进的RISC 结构

– 131 条指令 – 大多数指令执行时间为单个时钟周期 – 32个8 位通用工作寄存器 – 全静态工作

– 工作于16 MHz 时性能高达16 MIPS – 只需两个时钟周期的硬件乘法器 ? 非易失性程序和数据存储器 – 16K 字节的系统内可编程Flash 擦写寿命: 10,000 次

– 具有独立锁定位的可选Boot 代码区 通过片上Boot 程序实现系统内编程 真正的同时读写操作 – 512 字节的EEPROM 擦写寿命: 100,000 次 – 1K字节的片内SRAM

– 可以对锁定位进行编程以实现用户程序的加密 ? JTAG 接口( 与IEEE 1149.1 标准兼容) – 符合JTAG 标准的边界扫描功能 – 支持扩展的片内调试功能

– 通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程 ? 外设特点

– 两个具有独立预分频器和比较器功能的8 位定时器/ 计数器 – 一个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器 – 具有独立振荡器的实时计数器RTC – 四通道PWM – 8路10 位ADC

8 个单端通道

TQFP 封装的7 个差分通道

2 个具有可编程增益(1x, 10x, 或200x)的差分通道 – 面向字节的两线接口 – 两个可编程的串行USART

– 可工作于主机/ 从机模式的SPI 串行接口 – 具有独立片内振荡器的可编程看门狗定时器 – 片内模拟比较器 ? 特殊的处理器特点

– 上电复位以及可编程的掉电检测 – 片内经过标定的RC 振荡器 – 片内/ 片外中断源

– 6种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及 扩展的Standby 模式 ? I/O 和封装

– 32 个可编程的I/O 口

– 40引脚PDIP 封装, 44 引脚TQFP 封装, 与44 引脚MLF 封装 ? 工作电压:

– ATmega16L:2.7 - 5.5V – ATmega16:4.5 - 5.5V ? 速度等级

– 0 - 8 MHz ATmega16L – 0 - 16 MHz ATmega16

图一 ATmega16 的引脚

2 LED显示汉字的设计 2.1 硬件设计

汉字显示用四块SD41588的8*8点阵显示模块,组成一个16*16的显示屏用于显示一个16*16大小的汉字,汉字字模用汉字取模软件得到,显示汉字的段码由ATmega16的PB口和PD口组出,由于LED点阵的电压限置,在PB口、PD口输出段码信号后进入LED时每一路加一个大小为1K电阻以起到限流的作用,以免电流过大损坏LED显示屏,位码由ATmega16 的PA口给也,PA口给的是四位二进制码,通过两片74LS138译码器组成的4—16译码器来扫描16*16点阵的位,便可以显示汉字,具体显示内容由软件控制,至此LED显示汉字的设计的硬件

设计完成。(下面是我自己做的硬件,希望能有所帮助)

图3 LED显示汉字的设计实物图

2.2 软件设计

汉字显示的软件采用C语言进行编写,让显示屏循环显示“中色东方”,字体有华文行楷、黑体、楷体、华文彩云等,汉字段码输出采用延时函数来控制,改变延时时间可以改变汉字的滚动速度,位码的输出采用AVRATMEGA16的定时器来完成输出,定时时间到时,申请单片机中断,位码加一起到循环扫描的作用。下面是我写的程序,结合程序具体说时作用(程序用AVRSTDIO编译):

#include //系统头文件 #include //引用延时函数头件