LED单片机课程设计Word格式.docx
- 文档编号:22562909
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:23
- 大小:232.46KB
LED单片机课程设计Word格式.docx
《LED单片机课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《LED单片机课程设计Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
2)兼容MCS51指令系统
3)3个16位可编程定时/计数器中断
4)2个串行中断
5)2个外部中断源
6)2个读写中断口线
7)低功耗空闲和掉电模式
8)8k可反复擦写(>
1000次)FlashROM
9)256x8bit内部RAM
10)时钟频率0-24MHz
11)可编程UART串行通道
12)共6个中断源,3级加密位
13)软件设置睡眠和唤醒功能
图2AT89C52单片机引脚图
3、2、2LED流水灯
实现8个LED流水灯程序用中文表示为:
P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。
“程序语言”目前主要有汇编语言和C语言两种:
在我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。
前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。
CLR:
是将其后面指定的位清为0,程序中使对应端口输出低电平
ACALL:
是子程序调用指令,程序中调用了DELAY延时子程序
SETB:
是将其后面指定的位置成1,程序中是对应端口输出高电平
AJMP:
是无条件跳转指令,意思是:
跳转到指定的标号处继续运行
END:
是程序结束的伪指令,意思是告诉编译器,程序到此结束。
伪指令只告诉编译器此程序到此有何要求或条件,它不参与和影响程序的执行。
图3LED流水灯
图4流水灯程序流程图
3、2、3蜂鸣器
本电路通过一个PNP三极管9012来放大驱动蜂鸣器,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极,三极管的基极经过限流电阻R11后由单片机的IO控制,当输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;
当输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
因此,可以通过程序控制IO口输出的电平来使蜂鸣器发出声音和关闭。
产生各种可能的音响。
图5蜂鸣器电路
3、2、4数码管
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"
a,b,c,d,e,f,g,dp"
的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1s,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
图6数码管引脚图
3.2.5LM032L的LCD液晶显示时间
可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
LCD液晶显示器是LiquidCrystalDisplay的简称,LCD的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
LM032l是共阴极的,当高电平时,显示亮。
RS是复位端,E是使能端。
图7DS1302模块电路图
3.3硬件原理电路图
3.4Protel原理图
四、软件流程框图
图8主程序流程图
五、完整的程序清单
主程序清单:
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitLCD_EN=P3^4;
sbitLCD_RS=P3^5;
sbits1=P3^0;
sbits2=P3^1;
sbits3=P3^2;
sbitrd=P3^7;
ucharcount,s1num;
charmiao,shi,fen;
ucharcodetable[]="
陈秋梅FIR"
;
ucharcodetable1[]="
20:
25:
00"
sbitsmg1=P2^0;
sbitsmg2=P2^1;
sbitsmg3=P2^2;
sbitsmg4=P2^3;
sbitkey1=P0^1;
sbitkey2=P2^7;
sbitkey3=P0^3;
sbitkey4=P0^4;
sbitc=P0^5;
sbitb=P0^6;
sbita=P0^7;
sbitSPK=P0^0;
////////////////////////////////////////////////////////
voiddelay1(unsignedintcnt)
{
while(--cnt);
}
voiddelay(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
voidwrite_com(ucharcom)
LCD_RS=0;
P1=com;
delay(5);
LCD_EN=1;
LCD_EN=0;
voidwrite_data(uchardate)
LCD_RS=1;
P1=date;
voidinit()
ucharnum;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;
num<
15;
num++)
{
write_data(table[num]);
}
write_com(0x80+0x40);
12;
write_data(table1[num]);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
voidwrite_sfm(ucharadd,uchardate)
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_data(0x30+ge);
voidkeyscan()
rd=0;
if(s1==0)
if(s1==0)
{s1num++;
while(!
s1);
if(s1num==1)
TR0=0;
write_com(0x80+0x40+10);
if(s1num==2)
write_com(0x80+0x40+7);
if(s1num==3)
write_com(0x80+0x40+4);
if(s1num==4)
s1num=0;
write_com(0x0c);
if(s1num!
=0)
if(s2==0)
s2);
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
if(s3==0)
s3);
miao--;
if(miao==-1)
miao=59;
fen--;
if(fen==-1)
fen=59;
shi--;
if(shi==-1)
shi=23;
}
///////////////////////////////////////////////////////
main()
uchari;
smg1=1;
smg2=1;
smg3=1;
smg4=1;
while
(1)
if(key1==0)
P1=0xf9;
smg1=0;
delay
(2);
P1=0xc0;
smg2=0;
delay
(2);
P1=0xf8;
smg3=0;
P1=0xa4;
smg4=0;
if(key2==0)
c=0;
b=0;
a=0;
for(i=0;
i<
10;
i++)
delay1(2000);
a=1;
b=1;
c=1;
if(key3==0)
SPK=!
SPK;
50;
{
delay1(500);
}
}
if(key4==0)
init();
keyscan();
voidtimer0()interrupt1
count++;
if(count==18)
count=0;
六、调试情况及小结
6.1硬件调试
硬件调试是一件重要而细微的工作,许多硬件错误往往是在软件调试时被发现的。
通常,先排除明显的硬件故障,之后,再和测试软件结合起来调试。
硬件调试可分为静态调试和动态调试两步。
静态调试是在用户系统未工作时的一种硬件检测。
检测步骤如下:
①目测:
检查外部的各种元件或者是电路是否有断点,及焊点是否牢固,是否存在虚焊等现象;
②用万用表测试:
先用万用表复核目测中有疑问的焊接点及可能在焊接过程中烧坏的元件,再检测各种电源线与地线之间是否有短路现象;
③加电检测:
给板加电,检测所有插座或器件的电源是否符合要求;
④联机检测:
要完成对用户系统的调试,需在单片机开发系统环境下进行。
动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
6.2软件调试
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
6、3调试结果
key1数码管显示动态的数字1072,当key2键按下后流水灯,当key3键按下后可以显示蜂鸣器工作,当key4键按下后可以调节电子钟的分时间当key4键。
七、记录程序的步骤
1、用编辑软件编写程序,注意,使用汇编语言编写的程序文件名后缀(即扩展名)是.c,编写的程序称为源程序。
2、通过编程器扩展名为.HEX的可执行文件烧写到单片机内。
在写入之前还可以进行软件仿真,即在软件上模拟单片机程序原形情况,以便进行调试和修改。
八、心得体会
两个星期的实践和体验对我来说学到的不仅是那些知识,更多的是团队与合作。
这项看起来不需要多少技术的工作却是非常需要耐心和精力在两个星期后的今天我已明白课程设计对我来说的意义,它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的也会更多!
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
设计过程,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
通过本次设计,我学会了很多很多。
九、参考文献
1.梅丽凤,王艳秋,张军,单片机原理及接口技术.北京:
清华大学出版社,2007.8
2.程德福,林君,智能仪器.北京:
机械工业出版社,2007.6
3.张毅,干刚单片机应用程序,哈尔滨工业大学出版社
4.邓红张越《单片机实验与应用设计教程》冶金工业出版社
5.胡汉才《单片机原理及接口技术》清华大学出版社
6.李玉峰倪虹霞《MCS-51系列单片机原理与接口技术》人民邮电出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED 单片机 课程设计