单片机课程设计报告Word文档下载推荐.docx
- 文档编号:19166465
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:11
- 大小:35.92KB
单片机课程设计报告Word文档下载推荐.docx
《单片机课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
计算器是人们的日常生活中是最常见的电子产品之一,它应用极广、发展迅猛,并且不断出现着拥有更加强大功能的计算器。
为了解和研究计算器,本次实训设计制作了一个简易计算器,能够在五位的计算范围内进行“+”、“-”、“*”、“/”的基本运算,能进行负数的精确结果显示。
该计算器以AT89C51单片机芯片作为核心。
采用LCD1602工业字符液晶进行显示。
完成的计算器经过检验能够完整的实现预设功能,各种细节完善,具有很高的使用价值。
关键词:
单片机;
简易计算器;
AT89C51;
LCD1602
1实训任务
主要功能设计
以AT89C51单片机芯片为核心来制作一个简易计算器,外部由4*4矩阵键盘和一个LCD1602工业字符型液晶显示屏构成,内部由一块AT89C51单片机构成,通过软件编程可实现简单加减乘除。
任务目的
通过本次实训提高我们的单片机硬件设计、软件编程能力,自主学习到更多的单片机应用知识。
2整体设计方案
方案论证
计算器电路包括三个部分:
显示电路、4*4键扫描电路、单片机微控制电路。
具体如下:
(1)LCD显示电路
LCD1602作为一个成熟的产品,使用简单,模式固定,便于移植到各种类型的程序,但是初学者往往要注意结合LCD本身的时序图来完善初始化程序。
又以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,故采用LCD.
(2)4*4键盘扫描电路
对键盘上的某一行送低电平,其他行为高电平,然后读取列值。
若列值中有一位是低,则表明该行与低电平对应列的键被按下;
否则,扫描下一行。
根据读到的值组合就可以查表1得到的键码,因为编程的方式,本次实训采用逐行扫描来读取键值,方便程序编写。
(3)单片机微控制电路:
微控制电路就是以AT89C51为核心的控制核心,主要注意晶振电路的接法和复位电路的接法。
系统框图
系统框图
3控制软件设计:
实训中采用C语言对单片机进行编程,采用的是自下而上的设计方式,先设计出每一个模块(子程序),然后再慢慢扩大,最后组成程序。
程序总时序图
液晶显示软件设计
(1)显示流程
(2)1602液晶显示时序图,通过时序图,所有编程问题都可以得以解决。
(3)由时序图可以写出液晶的初始化函数、功能设置函数、清屏函数、写指令函数、写数据函数。
voiddelay1()//采用软件实现延时,5个机器周期
{
_nop_();
}
voidint1()//LCD初始化
lcd_w_cmd(0x3c);
lcd_w_cmd(0x0c);
lcd_w_cmd(0x01);
lcd_w_cmd(0x06);
lcd_w_cmd(0x80);
unsignedcharlcd_r_start()//读状态字
unsignedchars;
RW=1;
delay1();
RS=0;
E=1;
s=P1;
E=0;
RW=0;
return(s);
voidlcd_w_cmd(unsignedcharcom)//写命令字
unsignedcharg;
do{
g=lcd_r_start();
g=g&
0x80;
delay
(2);
}while(g!
=0);
P1=com;
delay(255);
voidlcd_w_dat(unsignedchardat)//写数据
RS=1;
P1=dat;
键盘输入软件设计
(1)键盘输入程序运行时序图
(2)键盘扫描程序
unsignedcharscan_key()
unsignedchari,temp,m,n,k;
bitfind=0;
P0=0xff;
k=0x01;
for(i=0;
i<
4;
i++)
P2=~k;
temp=~P0;
temp=temp&
0x0f;
k<
<
=1;
if(temp!
=0x00)
m=i;
find=1;
switch(temp)
case0x01:
n=0;
break;
case0x02:
n=1;
case0x04:
n=2;
case0x08:
n=3;
default:
if(find==0)return0xff;
elsereturn(n*4+m);
计算函数设置
因为只有16个健,所以计算上只设计了加减乘除的功能,下面是几个计算的程序
unsignedintjian()//减法函数
{if(a>
=b)
{q=0;
return(a-b);
}if(a<
b)
q=1;
return(b-a);
if(a2[i]<
10&
&
m==0)/第一个数
{a=a*10+a2[i];
if(a2[i]!
=14&
a2[i]>
9)//四则运算的判断
{m=1;
w=a2[i];
m==1)//第二个数
{b=b*10+a2[i];
if(a2[i]==13||o==1)//清零
{o=0;
lcd_w_cmd(0x01);
lcd_w_cmd(0x80);
a=0;
b=0;
wan=0;
qian=0;
bai=0;
shi=0;
ge=0;
m=0;
sum=0;
if(a2[i]==14)//等号
{l++;
p=jian();
//调用减法函数
switch(w)
{case10:
sum=a/b;
//除法
case11:
sum=a*b;
//乘法
case12:
sum=p;
if(q==1)lcd_w_dat('
-'
);
//减法
case15:
sum=a+b;
//加法
wan=sum/10000;
//万位
qian=(sum-wan*10000)/1000;
//千位
bai=(sum-wan*10000-qian*1000)/100;
//百位
shi=(sum-wan*10000-qian*1000-bai*100)/10;
//十位
ge=sum%10;
//个位
if(wan!
=0)//万位显示
{lcd_w_dat(a1[wan]);
lcd_w_dat(a1[qian]);
lcd_w_dat(a1[bai]);
lcd_w_dat(a1[shi]);
lcd_w_dat(a1[ge]);
if(wan==0&
qian!
=0)//千位显示
{lcd_w_dat(a1[qian]);
qian==0&
bai!
=0)//百位显示
{lcd_w_dat(a1[bai]);
bai==0&
shi!
=0)//十位显示
{lcd_w_dat(a1[shi]);
shi==0)//个位显示
{lcd_w_dat(a1[ge]);
if(l%2!
=0)//换行
{lcd_w_cmd(0xc0);
if(l%2==0)//换屏
{lcd_w_cmd(0x80);
o=1;
//运算完一次全部清零}
4软件调试:
(1)编程前先画了流程图,这样思路清晰,能按部就班的完成。
(2)子函数有显示部分、键盘扫描部分和计算部分,编写好后综合在一起。
(3)在将程序写在一起的过程中,使用ISIS进行了仿真,仿真过程模拟了键盘的输入,同时观察各种情况时液晶的输出情况。
个人小结:
第一天:
刚开始不知道实训室的电脑不行,走很多弯路,弄了整整一天,只是把教材的程序搬了上去,仅此而已,可以说,毫无收获。
第二天:
早上也是毫无收获,下午才发现电脑的问题,一下子就搞好了键盘输入。
可是新的问题又出现了,我根本就不会用四则运算,所以那天又被困住了。
第三天:
上午通过老师的详细讲解,初步运用了四则运算,下午进一步完善,但是还有负数没有弄好,晚上回到宿舍就成功完成了实训内容。
参考文献
教材《单片机应用技术(C语言版)》
附件
硬件设计电路的元件清单
器件名称
数量
AT89C51
1
按键
16
自锁开关
不自锁开关
电容22uF
晶振12MHz
电容30pF
2
发光二极管
510电阻
10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告