厦门理工学院2012电气《单片机原理与应用》课程设计任务书及程序

上传人:夏** 文档编号:559249497 上传时间:2023-04-02 格式:DOCX 页数:10 大小:39.11KB
返回 下载 相关 举报
厦门理工学院2012电气《单片机原理与应用》课程设计任务书及程序_第1页
第1页 / 共10页
厦门理工学院2012电气《单片机原理与应用》课程设计任务书及程序_第2页
第2页 / 共10页
厦门理工学院2012电气《单片机原理与应用》课程设计任务书及程序_第3页
第3页 / 共10页
厦门理工学院2012电气《单片机原理与应用》课程设计任务书及程序_第4页
第4页 / 共10页
厦门理工学院2012电气《单片机原理与应用》课程设计任务书及程序_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《厦门理工学院2012电气《单片机原理与应用》课程设计任务书及程序》由会员分享,可在线阅读,更多相关《厦门理工学院2012电气《单片机原理与应用》课程设计任务书及程序(10页珍藏版)》请在金锄头文库上搜索。

1、单片机原理与应用课程设计任务书附录程序设计题目2:简易数字电压表设计一、 设计内容及要求利用普中科技51单片机实验箱实现一简易数字电压表设计,其硬件原理框图如图1所示,其中电压测量采用A/D、D/A芯片PCF8591P,电压测量结果显示采用液晶LCD1602,系统要求实现以下功能:1、 基本功能:1) 系统至少能测量2个通道的直流波形信号(为提高测量精度,每个电压值最好通过测量3次进行平均得到);2) 能通过按键选择单通道1电压测量,单通道2电压测量;3) LCD能按照2)相应显示信号电压值,有效数字为4位;4) 能通过按键设置选择打开或关闭测量系统。2、 扩展功能:1) 能通过按键设置通道1

2、、2同时进行电压测量并在LCD上同时显示通道1、2相应的电压值;2) 能测量工频50Hz正弦交流信号电压值。图1 系统原理框图二、设计任务1、根据设计内容与要求,查找相关芯片与模块PCF8591P、LCD1602数据手册,弄清个模块硬件接口原理。2、根据设计内容与要求,弄清系统及各个模块的工作流程,完成系统的软件设计,包括系统主程序、显示子程序、键盘设置子程序、A/D采样与测量子程序等,可使用汇编语言或是C语言编写,建议使用C语言编写。3、完成系统的仿真与调试,使得系统在脱机情况下,能稳定可靠的工作。4、记录测量结果数据,并进行误差分析。5、编写课程设计报告。三、进度安排时间周次任务设计要求备

3、注2015.1.5周一上午任务下达,设计重点讲解,分发板子、工具等设计材料1、理解任务,查找资料;2、要求会使用万用表完成基本硬件电路的测试。下午完成硬件电路板测试,确保电路板正常使用2015.1.6周二上午完成单片机与LCD1602的接口程序设计及调试1、使用C51编写程序;2、要求能使用示波器检测数据交换时序,并判断时序的正确性,完成LCD1602接口的正确调试。下午2015.1.7周三上午完成单片机与PCF8591P的接口程序设计及调试1、学会I2C总线程序编写;2、理解A/D转换的原理及分辨率等理论计算。下午2015.1.8周四上午完成单片机、LCD1602、PCF8591P程序的融合

4、,完成系统总调试系统功能完整正确,运行流畅。下午2015.1.9周五上午完成系统电压数据测量并记录测量结果(每个通道至少10组数据),进行误差分析能正确测量电压并显示。下午课程设计作品验收四、预备知识1、51单片机原理与接口技术;2、详细了解PCF8591P、LCD1602数据手册,特别是单片机与PCF8591P的I2C总线接口通信时序。五、设计报告要求设计完成后,必须撰写课程设计报告。设计报告必须独立完成,格式符合要求,文字(不含图形、程序)不少于3000字,图形绘制规范。设计报告的格式如下:1、封面2、任务书3、内容提要(摘要)4、目录5、正文 (1)课题的意义、本人所做的工作、系统的主要

5、功能及工作流程; (2)硬件电路原理描述;(请详细说明电路原理并给出相应的原理图) (3)软件设计流程及描述;(请详细说明软件设计思路并给出相应的流程图) (4)系统测试,记录测量数据,进行误差分析; (5)结论。6、心得体会7、参考文献8、附录(1)系统总硬件电路原理图;(2)系统源程序代码(要有注释)。六、考核方式单片机课程设计的考核方式为考查,考核结果为优秀、良好、中等、及格和不及格五等,分数在90-100之间为优秀,80-89分之间为良好,70-79分之间为中等,60-69分之间为及格,60分以下为不及格。 考核分三个方面进行:日常表现20%;设计制作 40%;设计报告 30%;设计答

6、辩 10%。学生: 指导教师:日期:日期:附录:#include#include#define uchar unsigned char#define uint unsigned int#define Delay4us()_nop_();_nop_();_nop_();_nop_(); /延时函数sbit LCD_RS = P2 6;sbit LCD_RW = P2 5;sbit LCD_EN = P2 7;sbit SCL = P2 0; /I2C时钟引脚sbit SDA = P2 1; /I2C数据输入输出引脚sbit P1_0 = P1 0; /定义K1为开关sbit P1_1 = P1

7、1; /定义K2为通道1显示sbit P1_2 = P1 2; /定义K3为通道2显示sbit P1_3 = P1 3; /定义K2为通道12显示uchar Recv_Buffer4; /数据0接收缓冲uchar Recv_Buffer14; /数据1接收缓冲uint Voltage = 0, 0, 0, 0 ; /数据分解为电压x.xxxbit bdata IIC_ERROR; /I2C错误标志位uchar flag; /显示标志位uchar ON; /开关标志位uchar LCD_Line_1 = . V NO1 ; /第一行显示uchar LCD_Line_2 = . V NO2 ; /

8、第二行显示uchar s = ; /空显示uchar wel = welcome ; /显示欢迎界面/延时函数void delay(int ms)while (ms-)uchar i;for (i = 0; i250; i+)_nop_();_nop_();_nop_();_nop_();/LCD忙检测bit LCD_Busy_Check()bit Result; /位定义LCD_RS = 0; LCD_RW = 1;/忙标志和地址计数器读出LCD_EN = 1; Delay4us(); Result = (bit)(P0 & 0x80);/读忙标志及地址计数器AC命令 P0的D7位为1时表示

9、忙LCD_EN = 0;/EN下降沿时候LCD执行命令return Result;/1的时候表示忙/写指令void LCD_Write_Command(uchar cmd)while (LCD_Busy_Check();/LCD空闲时候才执行命令LCD_RS = 0; LCD_RW = 0; LCD_EN = 0;/指令寄存器写入开启_nop_(); _nop_(); P0 = cmd; Delay4us();LCD_EN = 1; Delay4us(); LCD_EN = 0;/下降沿液晶显示模块执行命令/ 写数据void LCD_Write_Data(uchar dat)while (LC

10、D_Busy_Check();/LCD空闲时候才执行命令LCD_RS = 1; LCD_RW = 0; LCD_EN = 0;/数据寄存器写入开启P0 = dat; Delay4us();LCD_EN = 1; Delay4us(); LCD_EN = 0;/下降沿液晶显示模块执行命令/初始化void LCD_Initialise()LCD_Write_Command(0x38); delay(5);/功能设置命令,八位数据位、双行显示、5X7点阵LCD_Write_Command(0x0c); delay(5);/显示开关控制命令,显示、光标不显示、字符不闪烁LCD_Write_Comman

11、d(0x06); delay(5);/输入方式设置命令,光标从左向右移动、内容不移动LCD_Write_Command(0x01); delay(5);/清屏命令/设置显示位置void LCD_Set_Position(uchar pos)LCD_Write_Command(pos | 0x80); /LCD起始地址是0x80/显示一行void LCD_Display_A_Line(uchar Line_Addr, uchar s)uchar i;LCD_Set_Position(Line_Addr);for (i = 0; i16; i+)LCD_Write_Data(si);/每行有16个

12、字符/ 将模数转换后得到的值分解存入缓存void Convert_To_Voltage(uchar val)int Tmp; uchar a = 58; /最大值为255,对应4.43V,255/4.43=57.5Voltage3 = val / a + 0; /整数部分Tmp = val % a * 10; / 第一位小数Voltage2 = Tmp / a + 0;Tmp = Tmp % a * 10; /第二位小数Voltage1 = Tmp / a + 0;Tmp = Tmp % a * 10; /第三位小数Voltage0 = Tmp / a + 0;/启动I2C总线void IIC

13、_Start()SDA = 1; SCL = 1; Delay4us(); SDA = 0; Delay4us(); SCL = 0;/IIC协议/停止I2C总线void IIC_Stop()SDA = 0; SCL = 1; Delay4us(); SDA = 1; Delay4us(); SCL = 0;/IIC协议/ 从机发送应答位void Slave_ACK()SDA = 0; SCL = 1; Delay4us(); SCL = 0; SDA = 1;/IIC协议/ 从机发送非应答位void Slave_NOACK()SDA = 1; SCL = 1; Delay4us(); SCL = 0; S

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

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