科 技 学 院
课程设计(综合实验)报告
( 20 -- 20 年度第 学期)
名 称:单片机课程设计
题 目:采集电压
院 系:信息工程系
班 级 13K2
学 号: 31
学生姓名:
指导教师:张老师
设计周数: 2
成 绩:
日期: 2015年 12月 31日
一、课程设计(综合实验)的目的与要求
题目:
根据上课已学内容和知识点设计:某个设备电路有个节点(电压量),用ATmega16单片机测量该节点处的电压值,显示节点电压。
要求:
(1)用液晶显示出采集的电压值
(2)液晶显示的同时要求单片机与PC有一条接口线,在PC上也显示采集的电压值
(3)在液晶显示和PC显示的基础上同时要求采集的电压0.5s采集一次(即刷新一次)
(4)当采集的电压值超过4.5V时,报警(即要有一个报警信号)
二、设计(实验)正文
1:设计思路
(1)对于采集电压值可根据A/D转换使得电压值能在液晶上显示;用液晶显示采集电压的值可根据课内实验做的液晶显示实验来写
(2)在PC上显示可根据UART通信的知识点(异步串行通信)来进行设计
(3)0.5s刷新一次可根据中断的知识点来设计
(4)报警可设计一个蜂鸣器,让其超过4.5V就报警(可在A/D转换中采用单片机内部基准电压,使其超过4.5V就报警)
2:设计代码
#include #include #include #define uchar unsigned char#define uint unsigned int#pragma interrupt_handler zhixing:20//采用中断uchar key_flag; //因为没用的,所以拿来用做全局变量uchar xians[]="0123456789";int jishu=0;uint ad;//设计全局变量void mega16_ad(void){ ADCSRA|=BIT(ADSC); //启动AD while(!(ADCSRA&(BIT(ADIF))));//等待AD转换结束 //读取寄存器的值 ad=ADCL;//低电平的8位值 ad=ad+ADCH*256;//使得ad的值为10位 }void zhixing(void)//中断子函数{ jishu++; if(jishu==500)//0.5s { mega16_ad(); jishu=0;//清零,一定要有 key_flag=1; }//结合主函数,用这个变量来控制串口显示的速度不会过快,符合0.5s刷新一次 }void delay(unsigned int i){ unsigned int a,b; for(a=1;a