单片机课程设计.docx
- 文档编号:10958060
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:42
- 大小:315.48KB
单片机课程设计.docx
《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(42页珍藏版)》请在冰豆网上搜索。
单片机课程设计
单片机技术课程设计说明书
简易计算器
系、部:
电气与信息工程系
学生姓名:
彭来
指导教师:
王韧职称副教授
专业:
电气工程及其自动化
班级:
电气本0901班
完成时间:
2010-12-30
摘要
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
关键词计算器;单片机
ABSTRACT
Withtherapiddevelopmentofscienceandtechnologyinrecentyears,theapplicationofSCMisagrowing,whiledrivingmoretraditionalcontroldetectiontechnologyupdates.Inreal-timedetectionandautomaticcontrolofmicrocomputerapplicationsystem,themicrocontrollerisoftenusedasacorecomponent,onlythemicrocontrollerisnotenoughknowledge,butalsoaccordingtothespecificcombinationofhardwarearchitectureofhardwareandsoftware,tobeimproved.
Keywords:
Calculator;Single-chipmicrocomputer
1.设计课题任务、功能要求说明及总体方案介绍
1.1设计课题任务
通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。
1.2功能要求说明
设计一个具有特定功能的计算器。
该计算器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
能实现
(1)基本的加、减、乘、除、平方、开方;
(2)三角函数运算;(3)十进制、十六进制转换运算;(4)其他功能。
1.3设计课题总体方案介绍
用FYD12864-0402B可显示16*16点阵汉字共8*4行的液晶屏加16个键的矩阵式键盘实现。
16个键的矩阵式键盘能实现功能更多的计算功能,液晶屏能显示特殊的字符+,-,*,/等,更重要的是显示位数相比数码管多,能显示计算过程,在此用单片机,液晶屏和矩阵式键盘等构成最小系统实现。
2.简易计算器硬件系统的设计
2.1硬件总体设计
硬件系统总体设计如图1所示。
图1硬件系统总体设计
2.2简易计算器硬件系统主要模块功能简要介绍
(1)功能芯片:
本次设计采用ATMEL公司生产的AT89S52芯片,低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
256字节RAM,32位I/O口线,与工业80C51产品指令和引脚完全兼容。
价格较低,能满足本次设计的要求。
(2)电源和复位模块:
AT89S52需5V电压,所以可以采用USB接口的5V电源对其供电,复位电路可采用上电复位、按键电平复位、按键脉冲复位3种,本次采用按键电平复位。
(3)显示模块:
该模块由FYD12864-0402B可显示16*16点阵汉字共8*4行的液晶屏组成。
(4)键盘模块:
键盘由16个矩阵式按键组成,接在单片机的P1.口上。
16键需要分时复用,在初始状态下为功能选择按S0键进入加减乘除界面:
S0~S9为数字键,S10~S13为加减乘除功键,S14为‘.’键,S15按一下为’=’功能,按二下'清屏’功能,在清屏后再按下为’退出’功能;按S1键进入开方,平方,三角,十进制转化为十六进制界面:
S0~S9为数字键,S10~S13为开方,平方,三角,十进制转化为十六功能键,S14为‘.’键,S15按一下为’=’功能,按二下'清屏’功能,在清屏后再按下为’退出’功能;按S2键进入万年历界面:
S15键按一下‘退出’功能。
(5)时钟模块:
为了保证同步工作方式的思想,单片机必须有时钟信号,以使其系统在时钟信号的控制下按时序协调工作。
2.3简易计算器电路原理图、PCB图、元器件布局图
简易计算器电路原理图见附录一。
简易计算器PCB图见附录二。
简易计算器元件布局图见附录三。
2.4简易计算器元器件清单
名称
规格
数量
DS1302加底座
DIP(8)
1
24c02加底座
DIP(8)
1
发光二极管
0.5mm
9
下载口座子
1
74ls138译码器
DIP(16)
1
六脚按键开关
8.5*8.5mm
1
排阻
10k
4
74ls373加底座
DIP(20)
1
AT89s52加底座
DIP(40)
1
12864液晶
FYD12864-0402B
1
电解质电容
22uF
1
瓷片电容
33pf
4
晶振
12MHz
32.768KHz
1
1
精密可调电位器
50K
1
蜂鸣器
5V
1
三极管
9012
1
大按键(带键帽)
12mm*12mm
17
电阻
1k
2
电阻
200
1
电阻
470
9
电阻
10K
1
短路帽
16
单排插针
40p
5
单排插槽
40p
2
点阵
8*8,单色(红色),3mm
1
电池
3.6v60mA
1
液晶系统元器件清单
3.简易计算器软件系统的设计
3.1简易计算器使用单片机资源的情况
(1)键盘由单片机P1口接排阻再接4*4矩阵式16个键盘。
(2)显示用到单片机P0口以及P3^0,P3^1,P3^5。
(3)下载部分用到单片P1^5,P1^6,P1^7。
1302时钟电路用到单片机P3^2,P3^3,P3^4。
(4)单片机的基本电源,时钟,复位单元等。
3.2简易计算器软件系统主要模块功能简要介绍
(1)主程序:
主程序的主要功能是调键扫判断是否有功能键按下,判断按下的键并调相应的键功能程序,以及数据的显示。
(2)键扫子程序:
主要通过键扫返回键值再对键值进行处理或用键值进行运算等。
(3)数据显示子程序:
数据显示程序分两大部分,整数部分的显示与小数部分的显示。
(4)键值处理子程序:
主要通过按键控制进行运算的数据分整数数据与小数数据处理部分。
(5)数据运算子程序:
该设计中有一个整数运算子程序与小数运算子程序,主要完成数据之间加减乘除,平方,开方,正弦,十进制转化为十六进制的运算。
3.3数字电子钟软件系统程序流程框图
(1)主程序流程框图如图2所示。
(2)键扫子程序子程序流程框图如图3所示。
(3)数据显示子程序框图如图4所示。
(4)键值处理子程序框图如图5所示。
(5)数据运算子程序框图如图6,图7所示
图2主程序流程图
图3键扫子程序图4数据显示子程序
图5键值处理子程序图6加减乘除运算子程序
图7特殊运算子程序
3.4数字电子钟软件系统程序清单
/********************
课程设计名称:
简易计算器;
设计者:
电气本0901班彭来;
设计完成时间:
2012年1月2日;
功能说明:
进行运算结果在0.00~255.OO之间的简单的加减乘除,平方,
开放,正弦,十进制到十六进制运算以及时间显示功能;
单片机最小系统说明:
该设计用到AT89C52单片机,1302时钟芯片,
FYD12864-0402B可显示16*16点阵汉字共8*4行的液晶屏
以及4*4矩阵式键盘等组成。
**********************/
#include
#include
#include
#include
#defineucharunsignedchar
#defineucharunsignedchar
#defineulongunsignedlong
ucharcodeyejingtable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,//0--9
0x2b,0x2d,0x2a,0x25,0x2e,0x3d,0X50,0X51,0X53,0X4F,0x41,0x42,0x43,0x44,0x45,0x46,0x48};
ucharshuzi1=0;//+-*/.=15PQSOa~f
ucharv=0,s1,s2,s3,s4,s5,s6,i,j,NO,YES,kk=0;
ulongm;
floata,b,c,s;
voidjianchuli();//键处理
voiddisply();//显示
voidyunsuan();//加减乘除运算
voidyunsuan1();//特殊功能运算
voidshuju();//数据处理
/*************主程序区**************/
voidmain()
{lcdset();
for(i=0;i<=80;i++)
{
display(1,2,"湖南工学院");
display(2,2,"简易计算器");
display(3,2,"电气本0901班");
display(4,2,"姓名:
彭来");
delay(5000);
}
kaishi:
lcdset();
display(1,3,"计算器");
display(2,2,"加减乘除0");
display(3,2,"特殊功能1");
display(4,2,"万年历2");
delay(5000);
while
(1)
{
kk=keyscan();
if(kk==0x11||kk==0x21||kk==0x41)
{
switch(kk)
{
case0x11:
NO=1;
break;
case0x21:
NO=2;
break;
case0x41:
NO=3;
break;
default:
break;
}
}
if(NO==1)
{NO=0;
gotoloop1;//加减乘除
}
if(NO==2)
{NO=0;
gotoloop2;//特殊功能
}
if(NO==3)
{NO=0;
gotoloop3;//万年历
}
}
loop1:
lcdset();
delay(1000);
display(1,2,"加减乘除0");
writecommand(0x90);
delay(50000);
while
(1)
{
v=keyscan();if(v==0x11||v==0x21||v==0x41||v==0x81||v==0x12||v==0x22||v==0x42||v==0x82||v==0x14||v==0x24||v==0x44||v==0x84||v==0x18||v==0x28||v==0x48||v==0x88)
{
switch(v)
{
case0x11:
s=0;
jianchuli();//0
break;
case0x21:
s=1;
jianchuli();//1
break;
case0x41:
s=2;
jianchuli();//2
break;
case0x81:
s=3;
jianchuli();//3
break;
case0x12:
s=4;
jianchuli();//4
break;
case0x22:
s=5;
jianchuli();//5
break;
case0x42:
s=6;
jianchuli();//6
break;
case0x82:
s=7;
jianchuli();//7
break;
case0x14:
s=8;
jianchuli();//8
break;
case0x24:
s=9;
jianchuli();//9
break;
case0x44:
s=10;s5=0;
jianchuli();//+
s1=1;
break;
case0x84:
s=11;s5=0;
jianchuli();
s2=1;
break;//-
case0x18:
s=12;s5=0;
jianchuli();
s3=1;
break;//*
case0x28:
s=13;s5=0;
jianchuli();///
s4=1;
break;
case0x48:
s=14;NO=1;
jianchuli();//.
s5++;
break;
case0x88:
s=15;
s6++;
if(s6==1&&s1==0&&s2==0&&s3==0&&s4==0&&s5==0)//退出
{s=s1=s2=s3=s4=s5=s6=a=b=c=m=i=j=v=NO=YES=0;
lcdset();
delay(50000);
gotokaishi;
}
if(s6==1)//=
{jianchuli();
yunsuan();//数据运算
disply();//显示
s=s1=s2=s3=s4=s5=a=b=c=m=i=j=v=NO=YES=0;
}
if(s6==2)//清屏
{s=s1=s2=s3=s4=s5=s6=a=b=c=m=i=j=v=NO=YES=0;
lcdset();
delay(50000);
gotoloop1;
}
break;
default:
break;
}
shuju();
delay(50000);
}
}
loop2:
lcdset();
delay(1000);
display(1,2,"特殊功能1");
writecommand(0x90);
delay(50000);
while
(1)
{
v=keyscan();
if(v==0x11||v==0x21||v==0x41||v==0x81||v==0x12||v==0x22||v==0x42||v==0x82||v==0x14||v==0x24||v==0x44||v==0x84||v==0x18||v==0x28||v==0x48||v==0x88)
{
switch(v)
{
case0x11:
s=0;
jianchuli();//0
break;
case0x21:
s=1;
jianchuli();//1
break;
case0x41:
s=2;
jianchuli();//2
break;
case0x81:
s=3;
jianchuli();//3
break;
case0x12:
s=4;
jianchuli();//4
break;
case0x22:
s=5;
jianchuli();//5
break;
case0x42:
s=6;
jianchuli();//6
break;
case0x82:
s=7;
jianchuli();//7
break;
case0x14:
s=8;
jianchuli();//8
break;
case0x24:
s=9;
jianchuli();//9
break;
case0x44:
s=16;s5=0;
jianchuli();//P
s1=1;
break;
case0x84:
s=17;s5=0;
jianchuli();
s2=1;
break;//Q
case0x18:
s=18;s5=0;
jianchuli();
s3=1;
break;//S
case0x28:
s=19;s5=0;
jianchuli();//O
s4=1;
break;
case0x48:
s=14;NO=1;
jianchuli();//.
s5++;
break;
case0x88:
s=15;
s6++;
if(s6==1&&s1==0&&s2==0&&s3==0&&s4==0&&s5==0)//退出
{s=s1=s2=s3=s4=s5=s6=a=b=c=m=i=j=v=NO=YES=0;
lcdset();
delay(50000);
gotokaishi;
}
if(s6==1)//=
{jianchuli();
yunsuan1();//数据运算
disply();//显示
s=s1=s2=s3=s4=s5=a=b=c=m=i=j=v=NO=YES=0;
}
if(s6==2)//清屏
{s=s1=s2=s3=s4=s5=s6=a=b=c=m=i=j=v=NO=YES=0;
lcdset();
delay(50000);
gotoloop2;
}
break;
default:
break;
}
shuju();
delay(50000);
}
}
loop3:
lcdset();
//Set_RTC();
//L1=0;
while
(1)
{ucharb;
display(1,3,"万年历2");
Read_RTC();//读1302
b=keyscan();
switch(b)
{
case0x88:
gotokaishi;
default:
break;
}
yejingdisplay();//显示
}
}
/***************子程序区*******************/
/**************运算结果显示子程序*********/
voiddisply()
{if(YES==0)
{if(NO==0)//整数
{shuzi1=c;
if(shuzi1<10)
{
writedata(yejingtable[shuzi1]);
}
if((shuzi1>=10)&&(shuzi1<=99))
{
m=shuzi1;
shuzi1=m/10;
writedata(yejingtable[shuzi1]);
shuzi1=m%10;
writedata(yejingtable[shuzi1]);
}
if((shuzi1>=100)&&(shuzi1<=255))
{
m=shuzi1;
shuzi1=m/100;
writedata(yejingtable[shuzi1]);
shuzi1=(m/10)%10;
writedata(yejingtable[shuzi1]);
shuzi1=m%10;
writedata(yejingtable[shuzi1]);
}
}
else//小数
{
if(c<1)//98
{c=c*100;m=(ulong)c;
writedata(yejingtable[0]);
writedata(yejingtable[14]);
shuzi1=m/10;
writedata(yejingtable[shuzi1]);
shuzi1=m%10;
writedata(yejingtable[shuzi1]);
c=300;
}
if((c<10)&&(c>=1))//987
{c=c*100;m=(ulong)c;
shuzi1=m/100;
writedata(yejingtable[shuzi1]);
writedata(yejingtable[14]);
sh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)