第一篇:基于51单片机的计算器论文摘要中英对照
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,作为微型机的一个主要分支,单片机在结构上的最大特点是把CPU、RAM和ROM存储器、定时器和多种I/O接口电路集成在一块超大规模集成电路芯片上。从它的组成和功能来看,一块单片机芯片其实就是一台计算机。本次设计是采用MSC-51单片机来设计的四位数计算器, 采用C语言进行程序编写实现计算器功能。外接4X4的键盘,通过键盘扫描来完成输入数的控制,利用驱动电路使数值与结果在七段共阴极数码管上正常显示,并设有清零键可随时完成计算与显示的清零。计算器将完成的0至9999整数的一次加/减/乘/除运算。
执行过程如下:
开机即显示0,等待键入数值,当输入数字,将通过数码管显示出来,在输入+、-、*、/运算符之后,计算器在内部执行数值转换和存储,并等待再次输入数值,当在键入数值后将显示键入的数值,按等号就会在数码管上显示运算结果。
n recent years, as computer penetration in the social field and large-scale development of integrated circuits, microcontroller applications are continually deepening, because of its powerful function, small size, low power consumption, cheap, reliable, easy to use, etc.therefore particularly suitable for systems with control of more and more widely used in automatic control, intelligent instruments, meters, data acquisition, military products and home appliances fields,As one of the main branch of microcomputer, microcontroller in the structure of the biggest feature is the CPU, RAM and ROM memory, timer and multiple I / O interface circuit integrated on a VLSI chip.The composition and function from its point of view, a single chip is actually a computer.This design is the use of MSC-51 microcontroller to design the four-digit calculator, using C programming
language to achieve calculator functions.4X4 external keyboard, the keyboard scan to finish by the number of control values and make the drive circuit to the cathode results in a total of seven-segment digital tube display properly, and has cleared at any time to complete key calculation and display clear.Calculator to complete an integer from 0 to 9999 plus / minus / multiply / divide.Implementation of the process is as follows:
Power is displayed 0, waiting type value, when the input numbers, will come out through the digital display, the input +,-,*,/ operator, the calculator in the internal implementation of the numerical conversion and storage, and wait for the re-enter the value, when Type the value in the type of value will be displayed by an equal sign will be displayed in the digital control operation results.Key words: SCM calculator keyboard scan C language
第二篇:单片机计算器课程设计报告
大连民族学院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
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
第三篇:单片机课程设计摘要
单片机数字时钟设计
摘要
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
而51系列单片机是各单片机中最为典型和最有代表性的一种,通过本次课程设计进一步对单片机学习和应用,从而更熟悉单片机的原理和相关设计并提高了开发软、硬件的能力。本设计主要设计一个基于80C51单片机的电子时钟,并在LED上显示相应的时间,通过两个控制键和4×4键盘来实现时间的调节功能。应用Proteus软件实现单片机数字时钟系统的设计与仿真。
关键词:单片机80C51数字时钟汇编语言
Abstract
With the computer in the social sphere in recent years, the penetration and the development of large scale integrated circuit, microcontroller applications are constantly deepening, because of its powerful function, small size, low power
consumption, cheap, reliable, easy to use and so on Therefore particularly suited to and control of the system, more and more widely used in automatic control, intelligent instruments, gauges, data acquisition, military products and household appliances and other fields, SCM is often used as a core
component in According to the specific hardware architecture, and application-specific software features object combine to make perfect.The 51 series is the most typical of the microcontroller and the most representative one, through this course designed to further study and application of microcontrollers, which are
more familiar with the principles of SCM and related design and development of improved software and hardware capabilities.The design of the main design of a 80C51 microcontroller
based electronic clock, and the LED display the corresponding time, by two control keys and 4 × 4 keyboard to achieve the regulatory function of time.Proteus software application MCU digital clock system design and simulation.Keywords: digital clock80C51microcontrollerassembly language
第四篇:单片机课程设计摘要(本站推荐)
摘要
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于数字钟电路的基本组成包含了数字电路的主要组成部分,因此进行数字钟的设计是必要的,研究数字钟及扩大其应用,有着非常现实的意义。
单片机数字时钟就是其中的一款设计。它具有编程灵活,便于电子钟功能的扩充,即可用该电子钟发出各种控制信号,精确度高等特点,同时可以用该电子钟发出各种控制信号。单片机数字钟是单片机为核心。时钟,本设计是以单片机AT89S52配备LED数码显示管,数字钟采用24小时制方式显示时间,带有年月日、秒表和闹钟功能。本设计打算采用蜂鸣器做提醒,因没有蜂鸣器所以采用闪灯来提醒。使人不仅仅是通过视觉来感受单片机数字钟带来的方便。
关键词:单片机 数字时钟 汇编
第五篇:单片机计算器课程设计报告
基于单片机的简易计算器设计
基于单片机的简易计算器设计
一、设计任务和性能指标
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】余永权,《89系列FLASH单片机原理及应用.》,电子工业出版社,2002。【4】杨恢先、黄辉先,《单片机原理及应用》,人民邮电出版社,2006年。【5】常敏、王涵、范江波,《单片机应用程序开发与实践》,电子工业出版社,2009年。