基于单片机的跑马灯课程设计 - 图文 下载本文

3.3 晶振电路

图3.4 晶振电路图

单片机系统里都有晶振,在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。熒绐譏钲鏌觶鷹緇機库。 在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。鶼渍螻偉阅劍鲰腎邏蘞。 单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。纣忧蔣氳頑莶驅藥悯骛。 晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。

颖刍莖蛺饽亿顿裊赔泷。 AT89C52使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。濫驂膽閉驟羥闈詔寢賻。 4. 系统的软件设计

4.1跑马灯及程序

此设计主要是采用控制系统的定时中断来完成的,应为设计要求16LED灯循环点亮,而且第一圈为1盏灯依次点亮,第二圈为2盏灯依次点亮,直到7盏灯依次点亮。按下复位键即可返回到第一圈。具体程序见附录。銚銻縵哜鳗鸿锓謎諏涼。

17

5. 系统调试及结果分析

本设计整体采用芯片较少,线路少,又标准板,谨慎按照电路图焊好元件后,检测电路全部正常,不存在虚焊或漏焊,焊错。应用Keil C51根据设计要求编写出程序后,调试中出现符号错误及无用编码,根据提示改进后最终成功编写出所要求的程序,并用仿真程序调用后得到预期效果。挤貼綬电麥结鈺贖哓类。 采用STC-ISP烧写软件进行程序烧写,开始不能下载,经检查串口线出现问题,另换串口线后,成功下载软件到单片机。赔荊紳谘侖驟辽輩袜錈。

6.总结和体会

经过努力,我终于完成这次最小系统的的课程设计任务。在这次的单片机课程设计中我感觉受益匪浅,不用说我在其中学到的新知识是多么有价值,也不用说它拓宽了我多少的眼界,只是说它让我的能力得到了提高就已足以成为我努力付出的回报。通过课程设计,我增强了对单片机的理解,学会查寻资料﹑比较方案,学会单片机的设计﹑计算;进一步提高分析解决实际问题的能力,创造一个动脑动手﹑独立开展电路实验的机会,锻炼分析﹑解决程序编写问题的实际本领,真正实现由课本知识向实际能力的转化;通过典型程序的设计与制作,加深对基本原理的了解,增强了实践能力。塤礙籟馐决穩賽釙冊庫。 7.参考文献

【1】模拟电子技术基础(第4版)(作者:华成英,童诗白)出版社:高等教育

出版社

【2】单片机原理与接口技术(修订版)(作者:赵嘉蔚,张家栋,霍凯)出版

社:清华大学出版社

【3】谭浩强.C程序设计.出版社:清华大学出版社(第三版),2005年7月 【4】潘明莲.为计算机原理(第二版).出版社:电子工业出版社,2003年9月 【5】谭博学.集成电路原理及应用(第三版).出版社:电子工业出版社,2001

年6月

【6】单片机原理及应用.出版社:西安电子科技大学出版社

18

8.附录:

8.1 PCB图

8. 2 程序

#include #include

#define uint unsigned int #define uchar unsigned char sbit key=P1^0; sbit led1=P0^0; sbit led2=P0^1; sbit led3=P0^2;

19

sbit led4=P0^3; sbit led5=P0^4; sbit led6=P0^5; sbit led7=P0^6; sbit led8=P0^7; sbit led9=P2^0; sbit led10=P2^1; sbit led11=P2^2; sbit led12=P2^3; sbit led13=P2^4; sbit led14=P2^5; sbit led15=P2^6; sbit led16=P2^7;

uchar ji=0xfe; uchar aa,bb;

void delayms(uint xms) {

uint i,j;

for(i=xms;i>0;i--) for(j=110;j>0;j--); }

void keyscan() {

if(key==0) {

delayms(10); if(key==0) {

ji=ji+1; while(!key); } } }

void main() { aa=ji;

/* bb=0xfc; while(1) {

keyscan(); if(aa!=ji)

20