基于51单片机实验报告(计算器)

上传人:ji****72 文档编号:27025901 上传时间:2018-01-05 格式:DOC 页数:16 大小:175.50KB
返回 下载 相关 举报
基于51单片机实验报告(计算器)_第1页
第1页 / 共16页
基于51单片机实验报告(计算器)_第2页
第2页 / 共16页
基于51单片机实验报告(计算器)_第3页
第3页 / 共16页
基于51单片机实验报告(计算器)_第4页
第4页 / 共16页
基于51单片机实验报告(计算器)_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《基于51单片机实验报告(计算器)》由会员分享,可在线阅读,更多相关《基于51单片机实验报告(计算器)(16页珍藏版)》请在金锄头文库上搜索。

1、基于 51 单片机实验报告(计算器)一计算器模块1.功能介绍利用 8051 单片机硬件资源和常用外围电路如 LCD1602,七段数码管,时钟(DS1302)温度传感器(18B20)等实现一个能做简单四则运算,并具有时钟显示,温度显示附加功能的计算器。2.设计方案利用 STC89C52为内核的单片机,PC 机。四则运算利用 4*4矩阵键盘实现从 09和运算符号的输入,并将操作过程和结果显示在上。时钟显示和温度显示,可以利用 DS1302产生年份,月份,日期,星期,时,分,秒的数据,并将数据送往显示,同样可以利用单片机开发板上面集成的 DS18B20温度传感器来测试周围环境的温度,将获取的温度通过

2、在 LCD1602来显示。系统设计框图3.具体实现代码计算器四则运算部分主要分为键盘扫描的键值读取,判断运算符号实现乘除优先级计算,LCD1602 显示。 键盘扫描常用的有行扫描法,线反转法,此处我们用行扫描法,可以更明了读取键值。unsigned char temp;key = null;/第一行按键P3 = 0xfe;temp = P3;temp = temp if (temp != 0xf0)delay(10); /延时 软件去抖动temp = P3;temp = temp if (temp != 0xf0) /确认有键按下temp = P3;switch (temp)case 0xee

3、:key = D; /读键值break;case 0xde:key = 0;break;case 0xbe:key = =;break;case 0x7e:key = /;break;flag+; 读完按键值之后我们需要读取运算的数字与运算符号,通过判断键值为数字则通过 nun=nun*10+key,计算出数字,判断键值为运算符号则读出数字和键值。flag = 0;addr+;while (flag = 0)scan();if (flag0) /如果有数据从键盘输入 /则关闭数码管的显示latch = 0;if (key = 0 & key #include/有_nop_指令/*/* 端口定义

4、 */*/sbit RS = P24;/1602 控制端sbit RW = P25;sbit EN = P26;sbit DQ = P13;/18b20 总线引脚/*/* 函数声明 */*/*/* 延时函数 */*/void Delay4us()/延时 4us;void Delay(unsigned char j)/一个循环延时 15usunsigned char i;while(j-)i=5;while(-i);/*/* 18b20 初始化函数 */*/bit Init_18b20()bit dat;DQ = 1;/DQ 复位Delay4us();DQ = 0;/拉低总线Delay(35);

5、/延时 525usDQ = 1;/拉高总线Delay(2);/延时 30usdat = DQ;/读取返回值(为 0 时有 18b20 存在,为 1 时没有)Delay(2);return(dat);/*/* 18b20 写入数据函数 */*/void WriteData_18b20(unsigned char dat)/写 8 位数据unsigned char i;for(i=0;i=1;/数据右移一位/*/* 18b20 读数据 */*/unsigned char ReadData_18b20()unsigned char i,dat=0;for(i=0;i= 1;/数据右移一位DQ = 1

6、;/拉高总线准备读取数据if(DQ)/判断若是 1.将数据赋给变量最高位dat=dat|0x80;Delay(4);return(dat);/*/* 读取温度值函数 */*/unsigned int ReadTemp()unsigned char i = 0;/低八位温度数据unsigned char j = 0;/高八位温度数据unsigned int k = 0;/总 16 位温度数据Init_18b20();/初始化WriteData_18b20(0xcc);/跳过序列号操作WriteData_18b20(0x44);/开启温度转换Delay(200);/延时 3msInit_18b20

7、();/初始化WriteData_18b20(0xcc);WriteData_18b20(0xbe);/读取 18b20 寄存器i=ReadData_18b20();/低八位j=ReadData_18b20();/高八位k = j;k = 4;switch(x) /小数位转换case 0: z=0;break;case 1: z=1;break;case 2: z=1;break;case 3: z=2;break;case 4: z=3;break;case 5: z=3;break;case 6: z=4;break;case 7: z=4;break;case 8: z=5;break;

8、case 9: z=6;break;case 10: z=6;break;case 11: z=7;break;case 12: z=8;break;case 13: z=8;break;case 14: z=9;break;case 15: z=9;break;z=z+48;/转 ascii 码ShowByte_1602(5,1,z);z = i x = z/10;/取出十位x = x+48;ShowByte_1602(2,1,x);x = z%10;/个位x = x+48;ShowByte_1602(3,1,x);void main()unsigned char i;Init_1602();Clear_1602();Lcd_User_Char();ShowByte_1602(4,1,.);ShowByte_1602(6,1,0x01);/自定义字符(摄氏度的点)ShowByte_1602(7,1,C);ShowString_1602(1,0,Temp Is:);while(1)Change(ReadTemp();for(i=0;i10;i+)Delayms(200);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号