单片机计算器课程设计报告

2024-06-19

单片机计算器课程设计报告(精选6篇)

篇1:单片机计算器课程设计报告

大连民族学院2007级电子信息工程专业单片机系统课程设计报告

机电信息工程学院

单片机系统课程设计报告

完成日期:2010年5月31日

系: 专

业: 班

级: 设计题目: 学生姓名: 指导教师:

多功能简易计算器

大连民族学院2007级电子信息工程专业单片机系统课程设计报告

一、设计任务和性能指标......................................................................2

1.1设计任务..............................................................................................................................2 1.2性能指标..............................................................................................................................2 二.设计方案.............................................................................................2 三.系统硬件设计.....................................................................................3

3.1单片机最小系统......................................................................................3 3.2键盘接口电路.....................................................................................................................3 3.3数码管显示电路.................................................................................................................4 3.4错误报警电路.....................................................................................................................5

四、系统软件设计..................................................................................6

4.1键盘扫描子程序设计..........................................................................................................6 4.2移位子程序及结果计算子程序设计................................................................................10 4.3显示子程序设计...............................................................................................................12 4.4主程序设计.......................................................................................................................13

五、调试及性能分析............................................................................13

5.1调试步骤...........................................................................................................................13 5.2性能分析...........................................................................................................................14

六、心得体会........................................................................................14 参考文献................................................................................................14 附录1 系统硬件电路图.......................................................................15 附录2 程序清单.................................................................................16

大连民族学院2007级电子信息工程专业单片机系统课程设计报告

一、设计任务和性能指标

1.1设计任务

利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个计算器,用LED显示计算数值及结果。

要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),印刷电路板(要求布局合理,线路清晰),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。1.2性能指标

1.2.3.4.5.加法:四位加法,计算结果若超过四位则显示计算错误 减法:四位减法,计算结果若小于零则显示计算错误 乘法:个位数乘法 除法:整数除法

有清零功能,计算错误报警

二.设计方案

按照系统设计的功能的要求,初步确定设计系统由主控模块、显示模块、错误报警模块、键扫描接口电路共四个模块组成,电路系统构成框图如图1.1所示。主控芯片使用51系列AT89C52单片机,采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。

键盘电路采用4*4矩阵键盘电路。

显示模块采用4枚共阳极数码管和74ls273锁存芯片构成等器件构成。

错误报警电路采用5V蜂鸣器。

大连民族学院2007级电子信息工程专业单片机系统课程设计报告

三.系统硬件设计

3.1单片机最小系统

单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。

主控芯片选取STC89C52RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便。

晶振选取11.0592MHz,晶振旁电容选取30pF。

采用按键复位电路,电阻分别选取100Ω和10K,电容选取10μF。以下为单片机最小系统硬件电路图。

单片机最小系统硬件电路

3.2键盘接口电路

计算器所需按键有:

数字键:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’ 大连民族学院2007级电子信息工程专业单片机系统课程设计报告

功能键:’+’, ’-‘ , ’*’, ’/ ’ , ’ = ’, ’ C(清零)’

共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0~P1.7,这样扫描P1口就可以完成对矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的口地址,对比P1口德扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。

以下为键盘接口电路的硬件电路图

键盘接口电路

3.3数码管显示电路

采用4位数码管对计算数据和结果的显示,这里选取共阳数码管,利用NPN三极管对数码管进行驱动,为了节省I/O资源,采取动态显示的方法来显示计算数据及结果。

利用74273锁存器来实现数码管的动态显示,P0口输出显示值,P2.4为段选口,控制273锁存器的时钟引脚,从而得到对数码管输入数据的控制。

P2.0~P2.3用来作为位选端,控制哪几位数码管进行显示。

以下为数码显示电路的硬件电路图

大连民族学院2007级电子信息工程专业单片机系统课程设计报告

数码显示电路硬件电路图

3.4错误报警电路

错误报警电路就是在计算结果出现错误时或输入数据出现错误时,发出声音警报,提示使用者错误出现。

这里就采用5V蜂鸣器作为报警设备,利用PNP三极管对蜂鸣器进行驱动,有P2.5对其进行控制,这样在出现错误的同时用P2.5输出低,就可以使蜂鸣器工作,完成报警任务。

以下为报警电路硬件电路图

大连民族学院2007级电子信息工程专业单片机系统课程设计报告

报警电路硬件电路图

系统整体硬件电路图见附录一

四、系统软件设计

4.1键盘扫描子程序设计

要进行数据的计算就必须先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。

对于键盘的扫描,既可以用行扫描也可以用列扫描,这里采用行扫描的方法来完成对键盘的扫描。

行扫描就是逐行扫描键盘,看是哪一行有键按下,再通过返回的键码来确定究竟是哪个按键按下。如对第一行扫描就令P1.0为低,P1口其余为高,这样若第一行有键按下,则P1口的值就会由0xfe变为其他值,再由这个值来确定是哪个键按下。

以下为键盘扫描子程序的程序清单。

uchar keyscan(){

int i;

P1=0xfe;

temp=P1;

temp=temp&0xf0;大连民族学院2007级电子信息工程专业单片机系统课程设计报告

while(temp!=0xf0){

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xee:{rdat++;num=1;left(rdat,num);}

break;

case 0xde:{rdat++;num=2;left(rdat,num);}

break;

case 0xbe:{rdat++;num=3;left(rdat,num);}

break;

case 0x7e:{rdat++;num=4;left(rdat,num);}

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

} } P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0){

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xed:{rdat++;num=5;left(rdat,num);}

break;

case 0xdd:{rdat++;num=6;left(rdat,num);}

break;大连民族学院2007级电子信息工程专业单片机系统课程设计报告

}

case 0xbd:{rdat++;num=7;left(rdat,num);}

break;

case 0x7d:{rdat++;num=8;left(rdat,num);}

break;} while(temp!=0xf0){

temp=P1;

temp=temp&0xf0;} }

P1=0xfb;temp=P1;temp=temp&0xf0;while(temp!=0xf0){

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xeb:{rdat++;num=9;left(rdat,num);}

break;

case 0xdb:{rdat++;num=10;left(rdat,num);}

break;

case 0xbb:{equ();}

break;

case 0x7b:{rdat=0;add=0;subb=0;mul=0;div=0;

result=0;

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

} 大连民族学院2007级电子信息工程专业单片机系统课程设计报告

} }

P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0){

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xe7:{rdat=0;add=1;subb=0;mul=0;div=0;

for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

case 0xd7:{rdat=0;add=0;subb=1;mul=0;div=0;

for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

case 0xb7:{rdat=0;add=0;subb=0;mul=1;div=0;

for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

case 0x77:{rdat=0;add=0;subb=0;mul=0;div=1;大连民族学院2007级电子信息工程专业单片机系统课程设计报告

} return num;}

} while(temp!=0xf0){

temp=P1;

temp=temp&0xf0;} }

for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

} break;4.2移位子程序及结果计算子程序设计

输入数据要存储在一四位数组内,而我们键入的值是数据的高位,后键入的值是低位,这样我们就需要在输入低位数值时将高位数值从数组的低位移向数组的高位,这就是编写移位子程序的目的。

对于结果计算子程序,包含加、减、乘、除四种运算。以加法运算为例,各种运算各有其标志位来代表计算类型,当加法标志位add=1是,就将输入的两个数据按照加法进行计算。

首先将数组内的数按照对应的位关系,将其转化为一个十进制数,这样我们就得到了加速和被加数这样俩个十进制数,从而我们就可以简单的将两个数进行相加,结果就是我们所求的数值。但这个数值不能直接显示到数码管上,我们还要对其进行处理,使其变为对应进位的四个数存入数组内,以便显示。既通过对结果数值分别除以1000、100、10和对10取余,得到我们想要的四个数,送显示子程序显示。其余减、乘、除的计算方法与加法的计算方法一样,这里不再累述。

以下为移位子程序和结果计算子程序的程序清单。

void left(uchar rx,uchar date){

switch(rx)

{

case 1:dat[0]=date;break;大连民族学院2007级电子信息工程专业单片机系统课程设计报告

void equ(){

int i,j,k;

long int s;

if(add==1){for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

result=result+s;add=0;}

if(subb==1){for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

result=result-s;subb=0;}

if(mul==1){for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

result=result*s;mul=0;

}

if(div==1){for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

result=result/s;div=0;

}

If(result>9999){dat[0]=11;dat[3]=dat[2]=dat[1]=0;}

if(result<=9999)

{

dat[0]=result%10;

dat[1]=(result/10)%10;

dat[2]=(result/100)%10;

dat[3]=(result/1000)%10;

} for(j=3;j>0;j--)

{ if(dat[j]>0)

{

case 2:dat[1]=dat[0],dat[0]=date;break;

case 3:dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break;

case 4:dat[3]=dat[2],dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break;

} } 大连民族学院2007级电子信息工程专业单片机系统课程设计报告

for(k=j-1;k>=0;k--)

{

if(dat[k]==0){dat[k]=10;}

}

}

} if(dat[0]==0){dat[0]=10;} } 4.3显示子程序设计

从始至终无论是输入的计算数据,还是计算后的结果值。都存储在同一数组dat[ ]中,这样我们只要在显示时一直调用dat[ ]中的值,就能正确的显示数据。

以下为显示子程序的程序清单。

void display(){

uchar aa;

keyscan();

P2=0x07;

aa=dat[0];

P0=table[aa];

P2=0x27;

delay(3);

P2=0x0b;

aa=dat[1];

P0=table[aa];

P2=0x2b;

delay(3);

P2=0x0d;

aa=dat[2];

P0=table[aa];

P2=0x2d;

delay(3);

P2=0x0e;

aa=dat[3];

P0=table[aa];

P2=0x2e;

delay(3);

} 大连民族学院2007级电子信息工程专业单片机系统课程设计报告

4.4主程序设计

主程序既把以上各子程序串连成一个整体,使整个程序循环运行。而在以上程序中也已经加入了个程序之间的连接点,首先进入程序后就立即进入显示子程序,而显示子程序内又调用键盘扫描子程序,若有键按下,则会跳转到移位子程序和结果计算子程序进行相应的处理。通过计算或移位后,数组内的值发生改变,显示的值也会同时发生改变。之后再进行键盘扫描,如此反复运行,就构成了程序的整体。

以下为主程序清单。

void main(){ num=0;

while(1)

{

display();

} }

整体程序清单见附录二。

五、调试及性能分析

5.1调试步骤

在焊接好器件后,先不要将芯片插在芯片座上,要先验证先板上电源是否好用,有无短路等。接上USB电源,用万用表测量个芯片座对应电源和地之间的电压值,观察电压值是否正常。一切正常后方可将芯片插入芯片座,以继续测试其他功能。

将芯片插上后,对各个模块进行调试,按键是否工作正常,数码管是否显示正常等。编写相关部分的测试程序对其进行测试。

各部分硬件检测无误后,下载程序进行整体调试,一切正常后,结束调试过程。

在具体调试时首先遇到的问题是程序无法下载进入单片机,通过将电路板接线与原理电路图接线的对比发现,串口芯片与单片机连接的输入,输出接反,重新用铜线连接后,依然无法下载程序。后找到原因是由于下载串口与设计封装不符,用相对应的下载线可以下载。

成功下载程序后,发现数码管显示不正确,查看后发现有先没有连接,可能是制板时漏印,连接后显示正常。大连民族学院2007级电子信息工程专业单片机系统课程设计报告

5.2性能分析

对于计算器的性能,主要的衡量指标就在于计算的精度,本次制作的计算器性能情况如下:

加法运算:四位加法运算,和值不超过9999,若超过上限,则显示错误提示E,蜂鸣器报警提示。

减法运算:四位减法运算,若结果为负,对其取绝对值。

乘法运算:积不超过9999的乘法运算,若超出上限,显示错误提示E,蜂鸣器报警提示。

除法运算:整数除法,既计算结果为整数,若除数为零,则显示错误提示E,蜂鸣器报警提示。

通过对实际性能的分析,可以得到本次设计满足设计的要求。

六、心得体会

通过本次课程设计我真正的自己完成了对给定要求系统的硬件设计、电路设计、电路板设计、软件设计以及对成品的调试过程。从整个过程中学习到了很多方面的知识,了解到以往学习中自己知识在某方面的不足之处,是对以往学习科目的一种贯穿和承接,从而能更好的认识和学习,也对将来从事工作大有裨益。

从本次课设中我也看到了自身的很多不足之处,对知识的掌握不够扎实,有一知半解的现象。有时做事不够稳定,过于毛躁,不能平心静气的去分析所遇到的问题和错误。这在以后的工作和生活中是不可取的,通过对自身问题的认识与改正相信再遇到同样问题时会更好的解决。以后的设计实验也会更好的完成。

参考文献

[1] 徐维祥、刘旭敏.单片微型机原理及应用.大连:大连理工大学出版社,1996 [2] 李光飞、楼然苗、胡佳文、谢象佐.单片机课程设计与实例指导.北京: 北京航空航天大学出版社,2004

[3] 余永权.89系列FLASH单片机原理及应用.北京:电子工业出版社,2002 [4] 李群芳,黄建.单片机微型计算机与接口技术.北京:电子工业出版社,2001 [5] 楼然苗、李光飞.51系列单片机设计实例.北京:北京航空航天大学出版社,2003 大连民族学院2007级电子信息工程专业单片机系统课程设计报告

附录1 系统硬件电路图 大连民族学院2007级电子信息工程专业单片机系统课程设计报告

附录2 程序清单

#include #define uint unsigned int #define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;uchar code table[]={ 0xff,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0xc0,0x86};uchar dat[]={10,0,0,0,0};uchar s[],a[];uchar num,temp,num1,rdat,add,subb,mul,div;unsigned long int result;void left(uchar rx,uchar date);uchar keyscan();void equ();void delay(uint z){ uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);}

void display();void main(){ num=0;

while(1)

{

display();

} } void display(){

uchar aa;

keyscan();

P2=0x07;

aa=dat[0];大连民族学院2007级电子信息工程专业单片机系统课程设计报告

P0=table[aa];

P2=0x27;

delay(3);

P2=0x0b;

aa=dat[1];

P0=table[aa];

P2=0x2b;

delay(3);

P2=0x0d;

aa=dat[2];

P0=table[aa];

P2=0x2d;

delay(3);

P2=0x0e;

aa=dat[3];

P0=table[aa];

P2=0x2e;

delay(3);

} uchar keyscan(){

int i;

P1=0xfe;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xee:{rdat++;num=1;left(rdat,num);}

break;

case 0xde:{rdat++;num=2;left(rdat,num);}

break;

case 0xbe:{rdat++;num=3;left(rdat,num);}

break;大连民族学院2007级电子信息工程专业单片机系统课程设计报告

}

case 0x7e:{rdat++;num=4;left(rdat,num);}

break;} while(temp!=0xf0){

temp=P1;

temp=temp&0xf0;} } P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0){

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xed:{rdat++;num=5;left(rdat,num);}

break;

case 0xdd:{rdat++;num=6;left(rdat,num);}

break;

case 0xbd:{rdat++;num=7;left(rdat,num);}

break;

case 0x7d:{rdat++;num=8;left(rdat,num);}

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

} }

P1=0xfb;temp=P1;大连民族学院2007级电子信息工程专业单片机系统课程设计报告

temp=temp&0xf0;while(temp!=0xf0){

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xeb:{rdat++;num=9;left(rdat,num);}

break;

case 0xdb:{rdat++;num=10;left(rdat,num);}

break;

case 0xbb:{equ();}

break;

case 0x7b:{rdat=0;add=0;subb=0;mul=0;div=0;

result=0;

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

} }

P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0){

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)大连民族学院2007级电子信息工程专业单片机系统课程设计报告

{

case 0xe7:{rdat=0;add=1;subb=0;mul=0;div=0;

for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

case 0xd7:{rdat=0;add=0;subb=1;mul=0;div=0;

for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

case 0xb7:{rdat=0;add=0;subb=0;mul=1;div=0;

for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

case 0x77:{rdat=0;add=0;subb=0;mul=0;div=1;

for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

dat[0]=10;dat[1]=dat[2]=dat[3]=0;

}

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

} 大连民族学院2007级电子信息工程专业单片机系统课程设计报告

} return num;}

void left(uchar rx,uchar date){

switch(rx)

{

case 1:dat[0]=date;break;

case 2:dat[1]=dat[0],dat[0]=date;break;

case 3:dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break;

case 4:dat[3]=dat[2],dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break;

} }

void equ(){ int i,j,k;long int s;

if(add==1){for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

result=result+s;add=0;} if(subb==1){for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

if(s>result){result=s-result;} else result=result-s;subb=0;} if(mul==1){for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

result=result*s;mul=0;

} 大连民族学院2007级电子信息工程专业单片机系统课程设计报告

if(div==1){for(i=0;i<5;i++){

if(dat[i]==10){dat[i]=0;}

}

s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3];

if(s==0)result=10000;

else result=result/s;div=0;

} if(result>9999){dat[0]=11;dat[3]=dat[2]=dat[1]=0;} if(result<=9999){ dat[0]=result%10;dat[1]=(result/10)%10;dat[2]=(result/100)%10;dat[3]=(result/1000)%10;} for(j=3;j>0;j--)

{ if(dat[j]>0)

{

for(k=j-1;k>=0;k--)

{

if(dat[k]==0){dat[k]=10;}

}

}

}

if(dat[0]==0){dat[0]=10;} } 22

篇2:单片机计算器课程设计报告

基于单片机的简易计算器设计

一、设计任务和性能指标

1.1设计任务

利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个计算器,用四位一体数码管显示计算数值及结果。要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),绘出程序流程图,并给出程序清单(要 求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。1.2性能指标

1加法:能够计算四位以内的数的加法。2减法:能计算四位数以内的减法。3乘法:能够计算两位数以内的乘法。

4除法:能够计算四位数的乘法

5有清零功能,能随时对运算结果和数字输入进行清零。

二、系统设计方案

按照系统设计的功能的要求,初步确定设计系统由单片机主控模块、四位一体数码管显示模块、键扫描接口电路共三个主要模块组成。主控芯片使用51系列AT89C51单片机,采用高性能的静态80C51设计,它由先进工艺制造,并带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。

键盘电路采用4*4矩阵键盘电路。

显示模块采用四位一体共阳极数码管和SN74LS244锁存芯片构成等器件构成。

三、硬件系统设计

1.单片机最小系统

单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。

主控芯片选取STC89C51RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便。

晶振选取11.0592MHz,晶振旁电容选取30pF。

采用按键复位电路,电阻分别选取100Ω和10K,电容选取10μF。单片机最小系统硬件电路图如图(1)所示。

图(1)单片机最小系统

2.键盘接口电路

计算器所需按键有:

数字键:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’

功能键:’+’, ’-‘ , ’*’, ’/ ’ , ’ = ’, ’ C(清零)’

共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行采用端口P0.0~P0.3,四列采用端口P3.0~P3.3,通过8个端口的的高低电平完成对矩阵键盘的控制。通过对16个按键进行编码,从而得到键盘的口地址,对比P1口德扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。

3.数码管显示电路

采用4位一体的数码管对计算数据和结果进行显示,这里选取共阳数码管,利用NPN三极管对数码管进行驱动,为了节省I/O资源,采取动态显示的方法来显示计算数据及结果。

利用SN74LS244N锁存器来实现数码管的动态显示,P1口输出显示值,P2.0~P2.3为位选端口。通过锁存器对段选信号的锁存,最终得到对数码管输入数据的控制。

以下为数码显示电路的硬件电路图,左图为数码管驱动电路,右图为段选信号锁存电路。

四.软件设计部分

根据选题要求,系统编程如下所示: #include “reg51.h” sbit P3_0=P3^0;sbit P3_1=P3^1;sbit P3_2=P3^2;sbit P3_3=P3^3;sbit P3_4=P3^4;sbit P3_5=P3^5;sbit P3_6=P3^6;sbit P3_7=P3^7;unsigned char sz[11],xs1[4],xs2[4],sj;int i,cs,bb,t1,t2,fh,s1,s2;void chushihua(){

} void xianshi(unsigned char xs[4]){ int i,j;unsigned char zy;bb=1;xs1[0]=10;xs1[1]=10;xs1[2]=10;xs1[3]=10;xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10;t1=0;t2=0;s1=s2=0;fh=0;cs=1;

// zy=0x08;for(i=0;i<4;i++){ P2=(0xff-zy);

P1=sz[xs[i]];

} zy=(zy>>1);for(j=0;j<100;j++);

for(i=0;i<100;i++);return;} unsigned char saomiao(){

int i,j;unsigned char pp;for(i=0;i<1000;i++);P0=0xfe;P3=0x0f;pp=P3;if(P3_0==0)if(P3_1==0)if(P3_2==0)if(P3_3==0)

{P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return 7;} {P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return 8;} {P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return 9;} {P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return 11;} //==========1 P0=0xfd;P3=0x0f;pp=P3;if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return 4;} if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return 5;} if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return 6;} if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return 12;} //==========2 P0=0xfb;P3=0x0f;pp=P3;if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return 1;} if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return 2;} if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return 3;} if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return 13;} //==========3 P0=0xf7;P3=0x0f;

pp=P3;if(P3_0==0)if(P3_1==0)if(P3_2==0)if(P3_3==0)return 10;

{P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return 16;} {P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return 0;} {P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return 15;} {P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return 14;} //===========4 } void chuli(unsigned char x){

int i;if(x==16){

} cs=0;return;if(x>=0 && x<10){ if(bb==1)

{

} if(s1= =4){cs=0;return;} else { for(i=3;i>0;i--)xs1[i]=xs1[i-1];

} xs1[0]=x;s1++;t1=t1*10+x;if(bb==2){

if(s2==4){cs=0;return;} else {

} for(i=3;i>0;i--)xs2[i]=xs2[i-1];xs2[0]=x;s2++;t2=t2*10+x;} } if(x>10)

{

if(bb==1){fh=x;bb=2;return;} if(bb==2){ if(fh==11)t1=t1/t2;

if(fh==12)t1=t1*t2;if(fh==13)t1=t1-t2;if(fh==14)t1=t1+t2;if(t1>=10000){cs=0;return;} else { if(t1>=0 && t1<10)

{xs1[0]=t1;xs1[1]=10;xs1[2]=10;xs1[3]=10;}

if(t1>=10 && t1<100){xs1[0]=t1%10;xs1[1]=t1/10;xs1[2]=10;xs1[3]=10;}

if(t1>=100 && t1<1000)

{xs1[0]=t1%10;xs1[1]=(t1-(t1/100)*100)/10;xs1[2]=t1/100;xs1[3]=10;}

if(t1>=1000 && t1<10000)

{xs1[0]=t1%10;xs1[1]=t1%100/10;xs1[2]=(t1-(t1/1000)*1000)/100;xs1[3]=t1/1000;}

bb=2;

}

}

} s2=0;t2=0;xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10;fh=x;} void main(){

sz[0]=0xfc;sz[1]=0x60;sz[2]=0xda;sz[3]=0xf2;sz[4]=0x66;sz[5]=0xb6;sz[6]=0xbe;sz[7]=0xe0;sz[8]=0xfe;sz[9]=0xf6;sz[10]=0x00;cs=0;

for(;;)

{

if(cs==0)chushihua();if(cs==1)sj=saomiao();if(cs==1 && sj!=10)chuli(sj);if(cs==1 &&(bb==1 || bb==2 && s2==0))xianshi(xs1);if(cs==1 &&(bb==2 && s2!=0))xianshi(xs2);

} } 软件设计好后,在KEIL上面进行仿真,把仿真得到的文件下载到Proteus里面进行仿真,得到Proteus仿真电路图如下所示:

图(2)

计算器Proteus仿真电路图

五.硬件电路焊接及调试

根据电路图纸,焊接好硬件电路,把程序下载到单片机芯片,接通好电源,进行调试。在焊接好器件后,先不要将芯片插在芯片座上,要先验证先板上电源是否好用,有无短路等。接上USB电源,用万用表测量个芯片座对应电源和地之间的电压值,观察电压值是否正常。一切正常后方可将芯片插入芯片座,以继续测试其他功能。

将芯片插上后,对各个模块进行调试,按键是否工作正常,数码管是否显示正常等。编写相关部分的测试程序对其进行测试。

各部分硬件检测无误后,下载程序进行整体调试,一切正常后,结束调试过程。

用所设计的单片机进行数字计算,显示结果与任务要求一致,焊接电路符合要求。六.课程设计心得

两周的时间,终于把单片机课程设计搞完了。整个体会还是比较多的。首先是题目的选择,各方面的原因,自己还是想选个简单点的题目,不过最后选来选去,还是选择了计算器。由于自己对单片机编程还不是很熟悉,结果在设计的时候遇到了一系列问题,程序总是调试部处理,不过还好,最后在同学的帮助下终于把程序调试出来了,虽然程序设计实现的功能与老师要求的不尽相同,不过勉强还算可以。从这里我知道了基本知识的重要性。其实进行程序设计的时候主要是对各功能模块的把握。计算器里面最难的一部分是矩阵键盘的扫描和编码,那个费了很大力气。

另外一点就是硬件焊接调试部分。焊接的时候到时轻松,一个下午就焊接好了,然后是调试部分。调试花费的时间还是比较长的。不过有了上个学期数字电路焊接调试的经验,这次单片机调试还算是比较顺利。我也是从电路板的正负电源检测起,一步一步来,最终得到了想要的结果。调试的时候主要遇到了两个问题。一个是键盘总是没有反应,为了这个自己调试了很久,前前后后把电路板检查了几次,最后才发现是键盘本身的问题,和同学们换了个好键盘才行。另一个问题是总是显示不出来1、4、7这三个数字。检测来检测去,发现来是在测试最小系统时在一个位选端接了高电平,对位选信号产生了影响。当把那个高电平去掉后,终于得到了正确的结果。

总的来说这次课程设计达到了完成了基本任务,达到了基本要求。通过亲身对程序设计和电路焊接调试的体会,自己对单片机有了进一步的了解,单片机编程能力也得到了提高。电路板的焊接与调试,使自己电路调试的方法和思想进一步加强了。这次单片机课程设计应该说是比较成功的。

参考文献:

【1】徐维祥、刘旭敏:,《单片微型机原理及应用》,大连理工大学出版社,1996年。【2】李光飞、楼然苗、胡佳文、谢象佐.,《单片机课程设计与实例指导.》,北京航空航天大学出版社,2004年。

篇3:单片机计算器课程设计报告

1 计算思维能力

计算思维从本质上而言源自数学思维, 因此像其他所有的科学一样, 其形式化解析基础是建立在数学之上。计算思维和工程思维的具有互补性与融合性。计算思维, 本身代表着一种普遍的认识和普适的技能, 涵盖了反映计算机科学广泛性与深入性的一系列思维活动。计算思维能力是美国的计算机科学专家周以真教授提出的, 他指出计算思维是每个人都应当拥有的基本技能, 无论是计算机科学家还是使用简单运算的学生都需要具备此解析的能力。计算思维是一种递归性思维, 用海量的数据可以基础概念抽象化和分解化去求解、设计和理解具有复杂化系统的问题。

随着信息化进程的全面深入与泛在化程度的加深, 计算思维已经成为人们认识、理解和解决问题的基本能力之一。计算思维作为一种素质, 或一整套解决复杂事物的一般问题的方法与技术所有受教育者都应该具备的此能力。在信息化社会, 一个人如果不具备相应的计算思维的能力, 将在学习和工作的竞争中处于不利地位。

对于大多数的非计算机专业的电类专业, 如电子信息工程, 电子信息科学与技术专业的培养过程中也设计了部分计算机专业的专业基础课程, 如C语言程序设计, 微机原理与接口技术, 数据结构, 数值分析等课程, 使学生具备了计算思维能力培养所需要的基础。但是不同于计算机科学与技术专业的培养, 在其后续的课程中则偏重于信号和信息的处理等课程, 在后续的课程中强调的是将计算机技术应用于本学科问题的解决。因此对于电类专业学生的培养过程中加强计算思维能力的培养是至关重要的。

2 单片机课程中的计算思维能力培养

在传统的单片机原理的课程中, 注重的是单片机原理和汇编指令的介绍, 同时在考核过程中也是强调基本知识的掌握, 在整个教学过程中并没有系统的把计算思维融入其教学过程中, 因此对于很多学生来讲, 学完这门课程只是对单片机的知识了解了一遍, 没有激发出学生的学习兴趣, 并且很难将知识转化为能力。针对以上的分析, 将计算思维能力的培养融入单片机的教学过程可以充分优化教学环节, 培养学生的思维创新能力。

2.1 结合项目式教学

单片机课程的知识点和计算思维能力培养可分解为独立的子课题项目进行, 各个子课题之间都具有联系性并服务于课程整体的知识体系, 选择一个合适的项目题目, 围绕这个具有单独教学目的的子题目, 让学生围绕该项目进行程序设计的循序渐进的学习, 致力于思维培养的连贯性。比如, 选择基于51单片机的计算器这个题目, 单片机这门课程的特点是硬件和软件相结合, 硬件是基础, 软件是灵魂, 在这个题目包含了相关的硬件设计, 如矩阵式按键, 液晶或数码管显示接口, 软件上则包括了相应的硬件驱动, 计算程序的相关算法, 让学生围绕这个题目展开思维的培养, 可以使学生在学习单片机的过程中做到有的放矢, 而不是毫无目的的去记忆些汇编指令或者的C语言指令。

2.2 加强实验上机, 体现计算思维

重视实验上机教学与学生的实践能力过程, 加强计算思维能力的在实践中的具体化过程。一般的单片机教学过程中, 实验的比重并不是很大, 针对这门实践性很强的课程有必要提高上机实验的比重, 同时围绕项目教学的核心, 在实验的过程中也是围绕项目题目逐步的展开实验教学, 让实验的教学保证连续性, 规范上机流程, 强调过程培养的目的性, 比如在上机过程中, 在教师讲解完之后, 学生应当遵循“实验题目分析-硬件设计-软件算法设计-编写代码-仿真-连接硬件电路-下载调试”的顺序, 引导学生在实验过程中逐步培养良好的计算思维能力和编程习惯, 帮助学生举一反三地学习好单片机原理这门课程。

2.3 课程模式的创新

以多维角度进行课程教学模式改革, 将计算思维能力培养融入单片机课程, 课程建设中体现计算思维能力培养的整体知识架构、具体路径与实践表现。

在授课方法方面, 在课程教学内容未调整情况下, 通过改进教学方法 (例如开展小组专题研讨、项目式问题引导、小组讨论和反思、自我总结与实践的建构等) 引导学生体会单片机课程及知识体系之下所蕴含的计算思维规律、系统化特征及一般方法;在授课内容重组方面, 单片机课程教学的知识点相对比较基础且具有系统性, 在学生具备一定专业课的基础上, 进行课程设计, 但需以计算思维为主线进行知识体系的重新组织, 并在课程内容的结构进行有大幅度的调整与重组。在授课内容和方式的改革方面, 将课程教学知识点进行加大和突出, 通过与思维训练有关的知识点的结合, 开设实验课程进行内化知识的外化过程, 加强计算思维的通识基础培养。

3 结语

单片机原理课程是大学生思维能力培养的重要课程之一。在教学改革过程中不仅要求授课教师在教学理念上的转变, 同时在授课及课程体系上要以培养学生计算思维能力为最终目标, 对单片机原理课程进行全面的提升与改革。因此, 推动计算思维观念的普及, 致力于计算思维的常识化, 促进在教育过程中对学生计算思维能力的培养, 有利于提高大学生在未来竞争环境中增强竞争力。

参考文献

[1]邓磊, 姜学锋, 刘君瑞.实施专业融合, 提升理工科学生的计算思维能力[J].工业和信息化教育, 2013 (6) :37-41.

[2]王移芝, 金一, 周围.基于“计算思维”能力培养的教学改革探索与实践[J].中国大学教学, 2014 (3) :49-53.

[3]翟子楠, 赵志敏.项目管理模式在单片机原理课程设计中的应用[J].中国电力教育, 2008 (5) :51-52.

[4]党向盈.“卓越计划”背景下程序设计课程走向工程能力和创新能力培养模式研究[J].科技信息, 2011 (35) :334.

[5]顾佩华, 李昇平, 沈民奋, 等.以设计为导向的EIP-CDIO创新型工程人才培养模式[J].中国高等教育, 2009 (3) :47-49.

[6]朱建鸿, 高美凤.《单片机原理》课程教学的探讨[J].江南大学学报:教育科学版, 2007 (2) :43-44.

[7]王可宁, 张雄星, 王伟.基于PBL的单片机原理课程教学改革探索[J].信息技术, 2011 (15) :197-198.

篇4:单片机计算器课程设计报告

【关键词】单片机;计算机应用;教学方法

单片机技术是现代电子技术、计算机实现数据采集与信号处理、计量测试与自动控制等技术中至关重要的一项新兴技术。同时,作为一种典型的嵌入式系统,它在工业控制、通信、日常生活等领域也都得到了广泛的应用。因此,国内各技工院校的电气自动化、机电一体化、计算机应用等专业都开设了单片机原理与应用课程。而对于计算机专业学生而言,学好单片机课程能帮助学生更好地学习其他相关专业知识,为此,笔者开始探索单片机课程在计算机专业中的教学教法。

1.单片机课程在计算机专业与电类专业中定位的不同

在我校计算机专业,虽然单片机原理与应用是学生的一门专业选修课。但对于计算机专业的学生来说,即使暂时没有从事单片机的应用与开发,学习单片机也有很重要的意义。一方面为将可能从事该方面的工作打下基础;另一方面,由于单片机作为微型计算机的一个种类,可以把它作为微型计算机的一个简化模型来看待,学习单片机可以加深对微型计算机工作原理的理解,更加清楚计算机的脉络。同时这门课又是一门实践性很强的课程。其实验教学环节不仅仅是对理论教学的深化和补充,而且对培养学生综合应用所学知识,解决实际问题的能力,也起着非常重要的作用。因此,在计算机专业开设单片机课程是非常必要的,但教学内容的重点与层次、教学方式等应跟电类学生有较大区别。

电类专业学生在学习该门课程之前已经学习了电工基础、数字电路、常用电工仪表测量等基础课程,不仅掌握了单片机一些基本外围电路的原理与应用,同时也具备了一定的焊接基础与常用仪表仪器的使用方法。学习单片机课程主要的目的是将这些基础知识与单片机芯片进行连接调试,实现智能化控制。因此,针对电类专业学生主要是培养他们根据项目需求设计硬件电路、软件编程与及整体调试的综合能力。而对于计算机专业的学生,这一定位显然过高,是他们难以达到的层次。相对应的,根据专业特点我们采用的教学方式也就不一样。

2.计算机专业中单片机课程教学方式的选择

我们希望计算机专业的学生能学习一定的理论知识,对微型计算机的工作原理有一个更深的理解,但传统的“实验箱”教学方式根本无法实现这一学习效果。因为“单片机试验箱”采用了集成化的封装,学生在进行实验测试时,只需要进行简单的按钮拨动与接线即可完成外围电路的设计,在这个过程中学生无需对单片机技术中的电路原理、程序运行过程等进行思考。因此,学生在实验过后仍无法真正了解单片机的结构原理,更谈不上应用。

另一方面,我们又必须考虑到单片机硬件电路的设计需要经过电路设计、焊接、测试等环节,而且根据设计的内容还需用到示波器、信号源、频率特性测试仪等仪器。要完成一项单片机系统的硬件设计,不仅需提供设备支持,还要求设计者本身具备一定的专业知识与实操技能。而这些,都是计算机专业的学生所缺乏的。因此,跟据学生特点、专业需求及学校实际情况。我校计算机专业的单片机采用了Proteus软件仿真教学为主、开放式实验室为辅的教学方式。

3.基于Proteus仿真教学为主的教学模式

Proteus软件由ISIS和ARES 2个软件构成,其中,ISIS是原理图编辑与仿真软件,ARES是布线编辑软件。

在这里我们主要用到的是ISIS软件,ISIS软件的主要特性有:

(1)支持大量的存储器和外围接口元器件。Proteus软件提供了30多个元件库,数千种元件。元件涉及到数字和模拟,交流和直流等。这样学生就不需要局限于实验室中仅有的元器件,在电路设计中可以有更多的选择方案。

(2)具有强大的原理图绘制功能。学生可根据任务需求设计电路原理图并在软件上进行绘图。ISIS的智能化程度很高,具有实时捕捉和自动布线(Toggle Wire Autorouter)功能。

(3)可以仿真、分析各種模拟器件和集成电路。在Proteus绘制好原理图后,调入已编译好的目标代码文件:*.hex,可以在Proteus在原理图中看到模拟的实物运行状态和过程。可以实时观察各个变量、寄存器等的当前状态。

(4)提供丰富的虚拟仪器。Proteus可提供示波器、逻辑分析仪、虚拟终端、信号发生器、交直流电压表、交直流电流表等。同一种仪器可以在一个电路上随意的调用。这些仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗,尽可能地减少了仪器对测量结果的影响。

基于Proteus软件以上特点,计算机专业的单片机教学主要采用仿真教学为主,其教学流程如下:

(1)学生根据提供硬件电路图,调用元器件并进行连线,在软件上进行原理图的绘制。

学生根据提供的程序,在软件上进行程序编写、编译。

(3)分析已知的软硬件条件,操作软件,调用相关的虚拟仪器,进行模拟仿真。

学生观察存储器等各参数,对已实现功能进行描述。

(5)学生理解单片机运行过程后,举一反三,对任务的硬件或软件进行修改,完成老师布置的作业。

通过如此学习,学生虽因电路知识的欠缺以及学校实训场地设备的限制不能动手制作实物,但还是能通过模仿实物这一流程和观察各寄存器数据的变化来学习单片机芯片的原理结构,进而更好地学习微型计算机。

4.开放式的电子实训室为辅,进一步激发学生兴趣

开放式的电子实训室是在学生完成基础实验之后视学生对知识点掌握程度不同而开设的学习环节。尽管是计算机专业学生,但对于部分学习能力较好或在单片机方面有较大兴趣的同学,他们也可能不仅仅满足于仿真,希望能将自己仿真成功的单片机系统做成实物。为了让这部分同学有充分的学习机会,体验学习带给他们的成就感,进一步激发他们的学习兴趣。我们开放电子实训室,学生只要提前预约,实验室在没有教学安排的情况下,学生可以一人或组队在实验室完成基础小实验的硬件电路焊接,并利用实验室的仪表仪器进行调试。

在此基础上,我们也提倡学生自选小课题、小制作进行创新设计,经过老师审核,实验室可提供学生自选课题中所需的电子元器件。开放实验室能更有效的培养和锻炼学生独立思考和独立制作的能力,尊重学生的个性发展,开发和引导学生对电子制作和微机应用的爱好和兴趣,培养学生的综合能力。

5.两种方式相结合,实现较好教学效果。

利用Proteus仿真软件实现的仿真教学作为主要的教学方式,可以弥补传统的单片机教学方法的不足,仿真的形象、生动、过程跟踪、结果显示等特性,达到师生互动,理论教学与实际应用相结合,起到较好的教学效果,同时,又可以降低计算机专业学生因缺乏电类知识对实验室设备与元器件造成的过多损耗。

而开放式实验室主要是面向学有余力的同学,他们在实物调试过程中,也可以充分体现到仿真软件带来的方便,对课堂教学也将起到积极的促进作用。单片机系统实物的实现,不仅锻炼了他们的动手能力,功能实现所带来的成就感也将进一步激发他们的学习兴趣,吸引他们更加努力学习单片机课程。

参考文献

[1]袁锋伟,赵立宏,朱惠玲等.基于Proteus的单片机课程教学与实验改革[J].实验室研究与探索,2007,26(12):75-78.

[2]蒋辉平,周国雄.基于Proteus的单片机系统设计与仿真实例[J].机械工业出版社,2009.

[3]董晋松.Proteus在单片机系统设计中的应用[J].现代电子技术,2008.

篇5:单片机课程设计报告

课程设计报告

设计题目: 基于80C51单片机系统实验板的制作

与程序设计

业:应用电子专业

级: 11应电班

名: 丁文俊

指导教师: 余静老师

2013 年 5 月20 日

目录 前 言………………………………………………………………… 2 课程设计的目的及要求…………………………………………… 3 硬件电路设计……………………………………………………… 4 软件程序设计…………………………………………………… 5 小结………………………………………………………………

参考文献 附录A 电路总图 附录B 程序清单

基于80C51单片机系统实验板的制作与程序设计

1.前言

2、课程设计的目的及要求 2.1课程设计目的

2.2课程设计要求

3、系统主要硬件电路设计

3.1 STC89C51单片机简介

MCS-51是美国Intel公司生产的一系列单片机的总称,包括多个品种,如8031、8051、8751、8032、80C52、8752等。其中8051是最典型的产品,其他单片机都是在其基础上进行功能增减而来的,所以人们习惯于用8051来称呼MCS-51系列单片机。Intel公司将MCS-51的核心技术授权给了多家公司,这些厂家生产的单片机在功能上或多或少有些改变,以满足不同的需求,其中美国的ATMEL公司生产的AT89C51是曾经在我国非常流行的51单片机。当前AT89C51/52已经停产,其替代产品为AT89S51/52。深圳宏晶公司出品的STC89C51可以直接代替传统的AT89S51和AT89C51芯片,也可以代替菲利普、华帮等其他公司的89C51,由于时代的发展,工艺的进步,STC89C51功能更强,寿命更长(4K字节Flash存储器、128字节片内RAM、支持ISP下载编程)

图2.1 STC89c51单片机

单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图2-2所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。

图2-2中外接晶体以及电容C2和C1构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均为30P左右,晶振频率选11.0592MHz。

为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H, SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。复位操作有两种情况,即上电复位和手动(开关)复位。本系统采用上电复位方式。图2-2中R9和Cl组成上电复位电路,其值R取为10K, C取为10μF.4

图2.2 最小系统结构图

3.2 电平转换电路 3.3

4、软件程序设计

5、小结

参考文献

[1] 张伟,《单片机原理及应用》,机械工业出版社,2005(这是格式)

附录

江西工业职业技术学院电子与信息工程系

课程设计指导教师评语

班级:

学生姓名:

学号:

指导教师评语(包括工作态度,遵守纪律;基本理论、知识、技能;独立工作能力和分析解决问题的能力;完成任务情况及水平):

学生成绩(五级分制):

指导教师签名:

篇6:单片机课程设计报告格式

一、封面(注明:单片机课程设计报告、课题名称、班级、姓名、指导教师、日期)

二、摘要(课题简要说明)

三、课题设计目标(功能、性能指标)、方案论证(要求作两种以上方案比较)

四、设计过程(关键电路工作原理、元器件参数选用、程序流程图、程序)

五、软硬件的安装、调试方法

六、完整电路图、性能参数测试

七、存在的问题和改进方向

上一篇:做一个领导者的八个要领下一篇:浅谈江底隧道施工技术及管理