LED显示相关内容Word格式.docx
《LED显示相关内容Word格式.docx》由会员分享,可在线阅读,更多相关《LED显示相关内容Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
![LED显示相关内容Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/5/280782ef-71d0-45bb-9eef-391ddf5dace8/280782ef-71d0-45bb-9eef-391ddf5dace81.gif)
5、培养团队协作精神。
二、应用
应用于展览中心、金融市场、医院、体育场馆、机场、码头、车站、街道、高速公路等公共场所,用于显示信息和宣传广告。
如果丰富其软硬件资源,可以更大程度的开发其潜在价值。
也许可以开发一种新游戏,制作一种定性分析测量系统,或者是发展成一种新型定位仪器……
三、作品
1、硬件
采用74HC164串行输入并行输出的芯片,节省了对单片机端口的占用。
用PORTA对LED的行进行操作,用PORTC的C0和C7分别控制74HC164的AB和Clock。
●AVR单片机是增强型内置FLASH的RISC(ReducedInstructionSetCPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结构,达到一个时钟周期可以执行一条指令,绝大部分指令都为单周期指令。
支持在系统编程ISP。
内置的FLASH程序存储器可擦写1000次以上,给用户的开发生产和维护带来方便。
可擦写10万次的E2PROM,为掉电后数据的保存带来方便。
AVR单片机有丰富的片内资源,如RTC,WATCHDOG,AD转换器,PWM,USART,SPI,TWI接口等,I/O口功能强、驱动能力强。
●LED显示系统主要由3部分构成:
PC上位机图像文字转换与数据发送单元、主控单元以及显示子模块。
上位机完成把图像和文字转换成为显示屏的显示码,并且把显示信息发送到主控单元上。
主控单元选用具有32kB片内FLASHROM,若要增加存储容量,可以选用外挂存储器,或者用其它更高级的单片机。
主控单元主要完成对显示数据的滚动和分割处理,然后通过异步串行口发送到每个子模块中。
用一片ATMEGA8-p.htm"
target="
_blank"
title="
ATMEGA8货源和PDF资料"
>
ATMEGA8完成扫描动态显示。
●74HC164是八位串行输入-并行输出移位寄存器.请参见资料。
电路图如下:
实物图如下:
2、软件
基于iccavr的编写要求,将循环语句加入到led点阵屏的现实当中,实现点阵屏对点阵字的循环显示。
流程图如下:
流程图
程序:
//ICC-AVRapplicationbuilder:
2009-5-30下午02:
13:
03
//Target:
M16
//Crystal:
4.0000Mhz
#include<
iom16v.h>
macros.h>
charjiantou[]={0x7d,0x7d,0x18,0x18,0x18,0x18,0x7d,0x7d,0x00,0x66,0x99,0x99,0x442,0x24,0x18,0x00,0x00,0x66,0x66,0x66,0x66,0x24,0x18,0x00};
voidport_init(void)
{
PORTA=0x00;
DDRA=0xff;
PORTC=0x00;
//m103outputonly
DDRC=0xff;
}
voidinit_devices(void)
//stoperrantinterruptsuntilsetup
CLI();
//disableallinterrupts
port_init();
MCUCR=0x00;
GICR=0x00;
TIMSK=0x00;
//timerinterruptsources
SEI();
//re-enableinterrupts
//allperipheralsarenowinitialized
voidsenddata(charb)
chari;
for(i=0;
i<
8;
i++)
{
PORTC|=(~b<
<
i)&
BIT(7);
PORTC|=BIT(0);
PORTC=0X80;
}
voidchang(void)
chari,j;
j=jiantou[0];
for(i=0;
7;
jiantou[i]=jiantou[i+1];
jiantou[7]=j;
voiddisplay()
inti,j,k;
senddata(jiantou[i]);
PORTA=~(0x01<
1);
for(j=0;
j<
1;
j++)
for(k=0;
k<
1000;
k++);
PORTA=0XFF;
voidmain(void)
intj;
init_devices()
while
(1)
10;
display(jiantou);
chang();
以上是软件的程序,由于硬件上采用的是共阳极的led点阵屏,所以将程序中的port端口的输出值取用相反值,从而实现点阵屏的显示。
说明:
●//ICC-AVRapplicationbuilder:
//Target:
//Crystal:
注释行,分别说明了程序生成者是ICC-AVRapplicationbuilder,生成时间,CPU类型,晶振大小,在本例中晶振大小没有用途,但在实际操作中,晶振大小将影响定时器的设置,PWM波形的输出,串口波特率的设定,总线时序等多方面的问题。
●#include<
#include<
包含特定头文件,iom16v.h和macros.h都在icc程序安装文件夹下一个include的目录中,iom16v.h和你选择的芯片相对应,如果你选择的是atmega16,那个这个文件就是iom16v.h,等等,在这样的文件中定义了对应的芯片的各个硬件地址。
macros.h文件中定义了一些宏命令和一些老的语言写法。
通常每一个程序都要包含这个头文件。
●字符数组
●PORTA=0x00;
定义PA口为0x00,及PA口上的所有管脚输出为低电平,同样道理,如果些微PORTA=0xFF,则都输入高电平,0xFF及二进制的11111111,如果想让某一位输出高,其他为低,如00000001,则是PA0输出为高电平,PA1——PA7输出为低电平。
每个口线与单片机实际引脚的对应关系请参看技术手册。
●voidport_init(void)
●voidinit_devices(void)
●voidsenddata(charb)
●voidchang(void)
●voiddisplay()
●voidmain(void)
●For语句
For(表达式1;
表达式2;
表达式3)
{
语句(内部可为空)
执行过程:
1.求解一次表达式1.
2.求解表达式2,若其值为真(非0即为真),则执行for中语句。
然后执行第3步。
否则结束for语句,直接跳出,不再执行
第3步。
3.求解表达式3.
4.跳到第2步重复执行。
●While语句
While(表达式)
语句(内部也可为空)
特点:
先判断表达式,后执行语句。
原则:
若表达式不是0,即为真,那么执行语句。
否则跳出while语句。
3、测试及分析
(1)测试仪器:
AVRStudio软件、仿真器、开发板
(2)测试与分析
a.测试点阵:
系统上电后,全屏点亮时无暗点,表明点阵正常,可使用。
b.程序调试:
通过AVRStudio下载程序到单片机上,逐步运行程序,并观察相关变量的值的改变,以确定各部分程序是否正常运行并可用,直到检测完毕。
c.实时操作:
运行已通过调试的程序.观察点阵屏幕的变化。
4、项目花费统计
元器件
数量
价格
排线
8条
2元
杜邦线
4条
1元
200欧电阻
8支
0.5元
插针
20支
16脚底座
1个
/
74HC164
8*8LED点阵屏
3.5元
合计
9元
5、成员分工
硬件、软件主要由孙俊杰负责,陈泉佑、胡庆丽为辅;
论文、PPT、网页、总结主要由陈泉佑、胡庆丽负责,孙俊杰为辅,论文、PPT最终由陈泉佑定稿;
网页、总结最终由胡庆丽定稿;
部分工作请老师和同学协助。
最终分配比例为:
孙俊杰:
34%
陈泉佑:
33%
胡庆丽:
结束语
经过认真的学习,努力的实践,终于完成了作品,虽然比较简单,但是适当丰富软硬件资源,该作品的实用前景还是相当广阔的。
通过此课程设计,我们不仅学习到了很多实用的知识,而且加强了同学间的交流,培养了合作精神。
在制作课程设计作品期间,曾听到某些人问:
“单片机即将过时了,学这些有什么用?
”
我认为,树上的苹果向下落了几千年,牛顿才发现了万有引力;
我们的单片机和发光二极管发展不过一个世纪,其潜在的价值还没有被充分地挖掘出来。
而且,即使是单片机这种实物载体即将过时,其所运用的原理和所体现出来的人类的探索创新的精神,是永远不会过时的。
参考文献和所用资源
参考书籍:
《Atmega16数据手册》
《74HC164数据手册》
《8×
8LED点阵屏工作原理》
《AVR单片机嵌入式系统原理与应用实践》马潮北京航空航天大学出版社
《C程序设计》谭浩强清华大学出版社
相关网站:
http:
//instruct1.cit.cornell.edu/courses/ee476/FinalProjects/
所用资源:
ICCAVR集成开发环境
AVRStudio软件
AVR开发板及相关元器件
Protel99SE
DreamweaverMX
MicrosoftOffice
感谢老师的辛勤教导,感谢同学的帮助支持,也感谢组员之间的相互理解和信任。
文章中不当之处,还请各位读者指出修正。
谢谢!
补充:
由于我们作品的灵活性强,发展空间大,本组同学在课程设计项目顺利完成之后,又适当丰富了软硬件资源,在程序中添加了键盘扫描部分,实现了通过按键控制8×
8LED点阵屏动态显示不同字符的功能。
鉴于时间有限,来不及再写一篇论文,重新制作网页,所以现在将新程序补充如下,相应的作品和视频材料请查看附件,关于新功能的材料准备的不是很充分,为此给读者带来的不便,我们深表歉意。
2009-5-1119:
36:
34
charixinyou[24]={0x7e,0x7e,0x18,0x18,0x18,0x18,0x7e,0x7e,0x00,0x66,0x99,0x99,0x42,0x24,0x18,0x00,0x00,0x66,0x66,0x66,0x66,0x24,0x18,0x00};
charhello[40]={0x00,0x66,0x66,0x7e,0x7e,0x66,0x66,0x00,0x7e,0x06,0x06,0x7e,0x7e,0x06,0x06,0x7e,0x00,0x06,0x06,0x06,0x06,0x7e,0x7e,0x00,0x00,0x06,0x06,0x06,0x06,0x7e,0x7e,0x00,0x00,0x18,0x24,0x66,0x66,0x24,0x18,0x00};
charseeyou[32]={0x18,0x66,0x06,0x08,0x10,0x60,0x66,0x18,0x7e,0x06,0x06,0x7e,0x7e,0x06,0x06,0x7e,0x7e,0x06,0x06,0x7e,0x7e,0x06,0x06,0x7e,0x00,0x66,0x66,0x66,0x66,0x24,0x18,0x00};
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
DDRC=0x00;
PORTD=0x07;
DDRD=0xF8;
//callthisroutinetoinitializeallperipherals
chari;
PORTB|=(~b<
PORTB|=BIT(0);
PORTB=0x00;
}
voidchange1(void)
j=ixinyou[0];
23;
ixinyou[i]=ixinyou[i+1];
ixinyou[23]=j;
voidchange2(void)
j=hello[0];
39;
hello[i]=hello[i+1];
hello[39]=j;
voidchange3(void)
j=seeyou[0];
31;
seeyou[i]=seeyou[i+1];
seeyou[31]=j;
voiddisplay(char*b)
{senddata(b[i]);
PORTA=(0x01<
i);
delay
(1);
PORTA=0x00;
//延时子程序
voiddelay(intn)
while(n-->
0)
125;
j++);
//是否有键按下子程序
charpressed(void)
if(PIND!
=0x07)return1;
return0;
//键盘扫描子程序
charkeyscan(void)
charkeycode;
if(pressed())delay(20);
keycode=PIND;
while(pressed());
delay(20);
returnkeycode;
charj,code=0;
init_devices();
code=keyscan();
switch(code)
case6:
while(pressed()==0)
{for(j=0;
display(ixinyou);
change1();
break;
case5:
display(hello);
change2();
case3:
display(seeyou);
change3();