版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机课程设计报告课 题:电子计算器学 院:报告人:目录1课题概述望开新08级电自08班20080711120251.1课题描述及实现功能1.2 按键说明系统的工作流程图系统程序设计3.1主程序模块设计3.2 LCD模块设计3.3蜂鸣器模块设计3.4 键盘模块设计3.5其他程序模块设计课程设计心得1课题概述1.1课题描述及实现功能1113141620本课题是基于ADUC848单片机的电子计算器设计。由于本实验所需的单片机开发板已经 确定,相应的硬件部分已经做好,所以我们只需要根据硬件原理图进行软件设计。部分采用C语言进行编写。软件设计根据要求设计的电子计算器的功能如下:1)2)3)利用小键盘作
2、为数据和命令的输入装置; 利用LCD显示过程和结果; 实现的运算包括:正实数的加、减、乘、除、开方、乘方、三角函数运算(sin、cos、tan );4) 未工作时显示北京时间;5) 当数据超出范围,可声音提示或报警。1.2 按键说明本系统采用4X4矩阵键盘作为输入部分,实现数据输入功能。本系统规定的键盘上的 各按键功能如下所示:1 (+)2 (-)3 (*)ON4 (/)5(sqrt)6(po wer)OFF7(s in)8(cos)9(ta n)ClearFuction0.=各按键功能如下:Fuction :功能键。按下此键,显示数字1至9括号里的运算符;未按此键,显示数字。ON显示北京时间
3、时,按下此键之后进入计算器状态。OFF在计算器状态下,按下此键之后显示北京时间。Clear :清除键。2系统的工作流程图#in clude#i nclude#in clude#in clude#in clude#in clude#in clude#in clude#defi ne uchar un sig ned char double xdata First,E nd1,E nd2;/定义全局变量void delay(i nt n) int i,j;for(i=0;i n;i+)for(j=0;j=y)z=x-y;else/加法程序减法程序z=y-x;return(z);double mul
4、(double x,double y) double z;z=x*y;return(z);double div(double x,double y) double z;z=x/y;return(z);double po wer(double x,i nt y)double z;int i;z=1;for(i=1;i30000)buzzer();key=14;else ecvt(First,fp);LCD Prin tStri ng(0,2,fp);break; case 2: First=sub(E nd1,E nd2);if(First30000)buzzer();key=14;else e
5、cvt(First,fp);LCD Prin tStri ng(0,2,fp);break; case 3: First=mul(E nd1,E nd2);if(First30000)buzzer();key=14;else ecvt(First,fp);LCD Prin tStri ng(0,2,fp);break; case 4: First=div(E nd1,E nd2);if(First30000)buzzer();key=14;else ecvt(First,fp);LCD Prin tStri ng(0,2,fp);break; case 5: First=sqrt(E nd2)
6、;if(First30000)buzzer();key=14;else ecvt(First,fp);LCD Prin tStri ng(0,2,fp);break;case 6: First =po wer(E nd1,E nd2);if(First30000)buzzer();key=14;else ecvt(First,fp);LCD Prin tStri ng(0,2,fp);break; case 7: First=s in(En d2);if(First30000)buzzer();key=14;else ecvt(First,fp);LCD Prin tStri ng(0,2,f
7、p);break;case 8: First=cos(E nd2);if(First30000)buzzer();key=14;else ecvt(First,fp);LCD Prin tStri ng(0,2,fp);break; case 9: First=ta n(En d2);if(First30000)buzzer();key=14;else ecvt(First,fp);LCD Prin tStri ng(0,2,fp);break;First=0; n=0;k=-1;g=1;f=0;break;case 100:ReadTime(time);switch(time3)case 1
8、:LCD Prin tStri ng(10,1,);LCD Prin tStri ng(10,1,Mo n.);break;case 2:LCD Prin tStri ng(10,1,);LCD Prin tStri ng(10,1,Tues);break;case 3:LCD Prin tStri ng(10,1,);LCD Prin tStri ng(10,1,Weds);break;case 4:LCD Prin tStri ng(10,1,);LCD Prin tStri ng(10,1,Thurs);break;case 5:LCD Prin tStri ng(10,1,);LCD
9、Prin tStri ng(10,1,Fri.);break;case 6:LCD Prin tStri ng(10,1,);LCD Prin tStri ng(10,1,Sat.);break;case 7:LCD Prin tStri ng(10,1,);LCD Prin tStri ng(10,1,Su n.);break;default:break;LCD Prin tNumber(0,1,2,time5); /mo nthLCD Prin tStri ng(2,1,/);LCD Prin tNumber(3,1,2,time4); /dayLCD Prin tStri ng(5,1,
10、/);LCD Prin tNumber(6,1,2,time 6); /yearLCD Prin tNumber(0,2,2,time2); /hourLCD Prin tStri ng(2,2,:);LCD Prin tNumber(3,2,2,time1); /mi nuteLCD Prin tStri ng(5,2,:);LCD Prin tNumber(6,2,2,time0); /seco ndkey=GetKey();if (key=12)/*进入计算状态*/t=1;key=0x80;LCDI nitialize();First=0;E nd1=0;E nd2=0;f=0;k=-1
11、;g=1; n=0;h=0; break;defaultbreak;if(n=0)En d仁First;elseEn d2=First;if(E nd1|E nd230000)buzzer();key=14;if(key=14)/清零 ACFirst=0;E nd1=0;E nd2=0;f=0;k=-1;g=1;h=0;LCDI ni tialize(); key=0x80;3.2 LCD模块设计sbit LCD RS=P 39=P 3人5;sbit LCD_RWsbit LCD_EN = P 3人3;sfr LCDData=0x80;void LCDWrite(bit cd, un sig
12、ned char inpu t);void LCDWait(u nsig ned char CiShu);void LCDDelay();void LCDI nitialize();void LCDPrintString(unsignedchar x,unsigned char y,unsigned char *string);voidLCD Prin tNumber( un sig nedcharx,un sig nedchary,un sig nedcharWeiShu ,un sig ned int nu mber);un sig ned char ReadState();void LC
13、DI ni tialize() /*设置16*2显示,5*7点阵,8位数据接LCDDelay();LCDWrite(0,0x38);口 */LCDDelayO;LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x38);LCDDelay();LCDWrite(0,0x08);LCDDelay();LCDWrite(0,0x01);零*/LCDDelay();LCDWrite(0,0x06);标加一,整屏显示不移动 */LCDDelay();LCDWrite(0,0x0c);/*/*/*/*关显示,不显示光标,
14、光标不闪烁*/显示清屏,数据指针清零,所有显示清读或写一个字符后地址指针加一,且光开显示,不显光标,光标不闪 */*cd=0, 写命令;cd=1,写数据*/void LCDWrite(bit cd,u nsig ned char DATA) LCDWait(20);LCD_RS=cd;LCD_RW=0;LCD_EN=0;LCDData=DATA;LCD_EN=1;LCD_EN=0;void LCD Prin tStri ng(un sig ned char x,un sig ned char y,un sig ned char *stri ng) /*写字符串*/un sig ned char
15、 address;/*指针定位,x为列,y为行*/address=x+(y-1)*0x40+0x80;LCDWrite(0,address);while(*stri ng!=0)LCDWrite(1,*stri ng);stri ng+;voidLCD Prin tNumber( un sig nedchar x,un sig ned chary,un sig nedcharWeiShu ,un sig ned int nu mber)/*写数字,最大为6位数,un sig ned char address;x列,y行,位数,数字*/un sig ned char j,te mp 5;addr
16、ess=x+(y-1)*0x40+0x80;LCDWrite(0,address);tem p 0=( nu mber%100000)/10000+48; temp 1=( nu mber%10000)/1000+48;temp 2=( number%1000)/100+48;temp 3=( number%100)/10+48;temp 4=nu mber%10+48;for(j=5-WeiShu;j5;j+)LCDWrite(1,tem pj);void LCDWait(u nsig ned char CiShu) un sig ned char i;for(i=0;iCiShu;i+)i
17、f(ReadState()&0 x80)co nti nue;else break;/*读状态*/un sig ned char ReadState()un sig ned char temp;P0=0xff;LCD_EN=0;LCD_RS=0;LCD_RW=1;LCD_EN=1;temp=LCDData;LCD_EN=0;return temp;void LCDDelayOun sig ned int a;for(a=0;a1000;a+);3.3 蜂鸣器模块设计void buzzer() un sig ned char i,j,k,l; for(k=0;k8;k+)for(i=0;i100
18、;i+) for(j=0;j10;j+) P 2|=0x40;dela y(3);P2&=0xbf;dela y(4); for(l=0;l100;l+) delay(100);for(i=0;i100;i+) for(j=0;j5;j+)P 2|=0x40;delay(6);P2&=0xbf;delay(8); for(l=0;l100;l+) delay(100);/* P2.6=1*/* P2.6=0*/* P2.6=1*/* P2.6=0*/void delay (un sig ned int x) un sig ned int m,n;for(m=0;m x; m+) for( n=
19、0; n10; n+); 3.4 键盘模块设计按键扫描头文件void KeyDelay (un sig ned int KeyJsTime); / un sig ned char GetKey();un sig ned char GetKey()un sig ned char temp;P1&=0xf0;P2&=0xf0;tem p=P1& 0x0f;if(temp!=0x0f) KeyDelay(666666); if(tem p=( P1& 0x0f)P2|=0x0e;switch( P1& 0x0f)case 0x0e:retur n 12;case 0x0d:return 13;cas
20、e 0x0b:retur n 14; case 0x07:retur n 15;case 0x0f:break; default:return 0x80;P2&=0xf0;P2|=0x0d; switch( P1& 0x0f) case 0x0e:retur n 3;case 0x0d:retur n 6;case 0x0b:retur n 9;case 0x07:return 11;case 0x0f:break; default:return 0x80;P2&=0xf0;P2|=0x0b; switch( P1& 0x0f) case 0x0e:retur n 2; case 0x0d:r
21、etur n 5;case 0x0b:retur n 8;case 0x07:retur n 0;case 0x0f:break;defaultreturn 0x80;P2&=0xf0;P2|=0x07;switch( P1& 0x0f)case 0x0e:retur n 1;case 0x0d:retur n 4;case 0x0b:retur n 7;case 0x07:return 10;case 0x0f:break; defaultreturn 0x80;retur n 0x55; void KeyDelay (un sig ned int KeyJsTime)un sig ned
22、char temp;un sig ned int JsKeyDelay; for(JsKeyDelay=0;JsKeyDelayKeyJsTime;JsKeyDelay+)tem p+;3.5 其他程序模块设计1.浮点数转字符串程序#i nclude#in clude#i ncludechar ecvt( double m,char *str); int a16;char ecvt( double m,char *str) int x,i,j,te mp ,t mp,num,n,p;x=m;p=1;tmp=x;num=0;while(x)a nu m=x%10;if(a nu m+=0) p=
23、p*1;else p=p *0;x/=10;if(p !=1)for(i=nu m-1,j=0;i=0;i-) strj+=ai+0; else str nu m+=0;str num =. ;n=num; temp=(m-t mp )*10000; while(te mp)a nu m+=te mp %10;tem p/=10;for(i=n+3,j=n+1;i=n ;i-) strj+=ai+0; if(a n!=0)str n+5=0;elseif(a n+1!=0)str n+4=0;elseif(a n+2!=0)str n+3=0;elseif(a n+3!=0)str n+2=0
24、;else str n=0; for(i=0;i16;i+)ai=0;return(*str);3.sin程序#i nclude #in clude double sin( double y);double sin( double y)double xdata x,s,fm,t,t1;double xdata fs;int n=1;/ 项数x=3.14*y/180;s=0,fs=x,fm=1,t1=1;/求和、分子、分母、精度、t1表示符号位t=fs/fm;/精度赋值while(fabs(t)=1e-6)/循环条件 s=s+t;/求和n+;/基数增加新分母一正一负fs=fs*x*x;/ 新分子 fm=fm*(2* n-2)*(2* n-1);/ t1=t1*(-1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川宜宾屏山县中医医院招募就业见习人员23人笔试参考题库及答案解析
- 2026年宣城广德市劳之家急救120驾驶员招聘考试备考题库及答案解析
- 2026年广东省佛山市高职单招职业技能考试题库含答案详细解析
- 2026陕煤集团榆林化学有限责任公司社会熟练技术技能人才招聘162人考试备考题库及答案解析
- 2026广东省人民医院赣州医院(赣州市立医院)招聘劳务派遣制文员1人笔试备考题库及答案解析
- 2026云南文山州麻栗坡城盛投资开发有限公司招聘6人笔试模拟试题及答案解析
- 2025-2026学年上海市黄埔区中考猜题卷:语文试题试卷含解析
- 江苏省南京市致远中学2026年初三第一次调研测试英语试题含解析
- 河南省开封市尉氏县重点达标名校2026年初三第一次五校联考自选模块试卷含解析
- 江苏省苏州市草桥中学2026届初三下学期摸底语文试题含解析
- 2026年吉安职业技术学院单招综合素质考试题库含答案详解
- 2026年安徽林业职业技术学院单招综合素质考试题库含答案解析
- 薄抹灰施工方案
- 2026年餐饮服务标准操作流程培训
- 2026年南京交通职业技术学院单招职业技能考试题库及答案详解(基础+提升)
- 卫生院防雷安全生产制度
- 绍兴2025年浙江绍兴市政务服务办公室招聘政务服务专员6人笔试历年参考题库附带答案详解
- 中华人民共和国药品管理法实施条例培训宣贯
- 2024新版2026春北师大版八年级数学下册全册教案教学设计
- 【生物】2025-2026学年人教版生物七年级下册核心知识点
- QGDW11337-2023输变电工程工程量清单计价规范
评论
0/150
提交评论