数字电压表的设计 - 图文
更新时间:2023-09-29 12:24:01 阅读量: 综合文库 文档下载
- 数字电压表的设计论文推荐度:
- 相关推荐
单片机原理 课程结业报告
题目(14): (数字电压表的设计)
学号:031240634 姓名:刘漫
一、 设计要求
以单片机为核心,设计一个数字电压表。采用中断方式,对2路0~5V的模拟电压进行循环采集,采集的数据送LED显示,并 存入内存。超过界限时指示灯闪烁。
二、 设计原理
以单片机为控制器,ADC0809为ADC器件的AD 转换电路,设计要求的电压显示,是对ADC采集所得信号的进一 步处理。为得到可读的电压值,需根据ADC的原理,对采集所得的信号进行计算,并显示在LED上。本项目中ADC0809的参考电压为+5V,根据定义,采集所得的二进制信号addata所指代的电压值 为:
adata?5V 256而若将其显示到小数点后两位,不考虑小数点的存在(将其乘以100),其计算的数值为:
addata?100?5V?addata?1.96V
256。将小数点显示在第二位数码管上,即为实际的电压。本示例程序将1.25 V和2.5 V作为两路输入的报警值,反映在二进制数字上,分别为0x40和0x80。当AD结果超过这一数 值时,将会出现二极管闪烁和蜂鸣器发声。
三、 设计电路图
3.1设计思路
1、根据设计要求,选择AT89C51单片机为核心控制器件。
2、A/D转换采用ADC0809实现,输出端口与单片机的接口为P1口,时钟等端口与P2口的低四位引脚相连。
3、数字电压显示采用LCD显示。
3.2系统组成
硬件电路设计由3个部分组成:A/D转换电路,AT89C51单片机系统,LCD显示系统。硬件电路设计框图如图所示:
模拟电压 ADC0809 转换 AT89C51单片机 数据显示
数字电压表系统硬件设计框图
3.3原理图
四、 核心代码设计思路及程序流程图
4.1程序设计方案
根据模块划分的原则,将该程序划分为初始化模块、A/D转换子程序和显示子程序,这三这个程序模块构成了整个系统软件的主程序,如图1如所示:
开始 初始化 否 调用A/D转换子程序 调用显示子程序 是 结束
图1 数字式直流电压表主程序框图
4.2系统子程序设计
4.2.1子程序初始化
所谓初始化,是对将要用到的AT89C51单片机内部部件或者扩展芯片进行初始工作状态设定,主要设置定时器的工作模式、初值预置、开中断和打开定时器等。
4.2.2 A/D转化子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图2所示。
开始 启动转换 否 A/D转换结束 是 输出转换结果 数值转换 显示 结束
五、 Proteus仿真图
电压较小时
电压接近报警值时
电压达到报警值后
达到最大测量范围值时
六、 Keil核心源代码
#include \ #include
sbit ST_ALE=P3^0; //START and ALE both connect to P3.0 sbit EOC=P3^1; //EOC connect to P3.1 sbit OE=P3^2; //OE conect to P3.2 sbit CLK=P3^3; sbit lcdrs=P2^4; sbit lcdrw=P2^5; sbit lcden=P2^6; sbit beep=P3^4; sbit led=P3^5;
unsigned char CHANNEL; //AD channel variable uchar code num[]=\
/*
void delay(unsigned char time) {
unsigned char i,j; for(i=time;i>0;i--) for(j=250;j>0;j--) ; } */
void delay(uint x) { }
void write_com(uchar com ) { }
void write_data(uchar date) { } void init() { }
lcden=0; lcdrw=0;
write_com(0x38);//lcd显示模式,16x02;8接口 write_com(0x0c);//开显示,显示光标,光标闪烁 write_com(0x06);//地址自加,字符不整屏移动; write_com(0x01);//清屏; lcden = 0;
lcdrs = 1;//n.1 write into the data; P1 = date; delay(5); lcden=1; delay(5); lcden=0; lcden = 0;
lcdrs = 0;//表示命令选择 P1 = com; delay(5); lcden=1; delay(5); lcden=0; uint i; for(;x>0;x--)
for(i=110;i>0;i--);
void display(uchar channel) {
unsigned long temp;
unsigned char DATA,count,digit[4]; unsigned int k=0,i=0;
DATA=P0; //save AD data
temp=DATA; //the temporary variable
temp=temp*1000/51; //AD formula:D=A*5/255 digit[0]=temp/1000; //the thousands place digit[1]=temp00/100; //the hundreds place digit[2]=temp000/10; //the tens place digit[3]=temp000; //the ones place
if(channel==0) {
write_com(0x80); write_data('1'); write_data('=');
write_data(num[digit[0]]); write_data('.');
write_data(num[digit[1]]); write_data(num[digit[2]]); write_data(num[digit[3]]); write_com(0x80+0x08); }
if(channel==1) {
write_com(0x80+0x40);
if(DATA>0x40) { } else { }
for(count=0;count<8;count++) { }
write_data(normal[count]); for(count=0;count<8;count++) { } beep=1;
write_data(abnormal[count]);
write_data('V');
beep=0;
write_data('V'); }
void main() {
CHANNEL=0xF8; //AD channel 0 ST_ALE=0; //START and ALE default OE=0; //OE default
TMOD=0x02; //T0 operate in mode 2 TH0=0xFF; //auto load value TL0=0xFF; //default value EA=1; //all interrupt enable ET0=1; //T0 interrupt enable TR0=1; //T0 run init(); beep=0; led=0; while(1) {
write_data('2'); write_data('=');
write_data(num[digit[0]]); write_data('.');
write_data(num[digit[1]]); write_data(num[digit[2]]); write_data(num[digit[3]]); write_com(0x80+0x40+0x08); }
if(DATA>0x80) { } else { }
for(count=0;count<8;count++) { }
write_data(normal[count]); for(count=0;count<8;count++) { } led=1;
write_data(abnormal[count]);
led=0;
P2=0x07&CHANNEL; //choose AD channel ST_ALE=1; //lock the AD channel address ST_ALE=0; //AD run
while(EOC==0); //wait until AD over OE=1; //enable to transmit AD data if(CHANNEL==0xF8) {
display(0); //view the AD result and diaplay LED }
if(CHANNEL==0xF9) {
display(1); //view the AD result and diaplay LED }
delay(50); //delay to prepare for next AD channel OE=0; //forbit to transmit AD data if(CHANNEL==0xF9)
CHANNEL=0xF7; //AD channel loop CHANNEL++; //next AD channel } }
void T1_TIME() interrupt 1 using 0 {
CLK=~CLK; //CLK 500 kHz }
P2=0x07&CHANNEL; //choose AD channel ST_ALE=1; //lock the AD channel address ST_ALE=0; //AD run
while(EOC==0); //wait until AD over OE=1; //enable to transmit AD data if(CHANNEL==0xF8) {
display(0); //view the AD result and diaplay LED }
if(CHANNEL==0xF9) {
display(1); //view the AD result and diaplay LED }
delay(50); //delay to prepare for next AD channel OE=0; //forbit to transmit AD data if(CHANNEL==0xF9)
CHANNEL=0xF7; //AD channel loop CHANNEL++; //next AD channel } }
void T1_TIME() interrupt 1 using 0 {
CLK=~CLK; //CLK 500 kHz }
正在阅读:
数字电压表的设计 - 图文09-29
国内体育对外宣传翻译现状06-09
组合式大钢模板施工方案09-13
2020(行业报告)众筹融资行业报告.05-05
上海交通大学统计学原理大作业(1)03-17
2018年中国蜂蜜市场竞争格局报告目录04-02
发展对象预审情况表(2)04-17
游戏执行策划,表格12-21
油画风景写生教学论文08-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 电压表
- 图文
- 数字
- 设计
- 2018年上海徐汇区初三语文二模试卷(含答案)
- 怀仁集《王羲之圣教序》原文及译文 - 图文
- HNC-XP铣床说明书
- 九寨汽车4日游
- 精装修39个常见问题及应对措施
- 浙江省台州市天台县始丰中学八年级英语上册 Unit 7 Will people have robots导学案
- 2019高考物理必考实验精细精讲 实验六 验证机械能守恒定律学案
- 28053江苏自考教师职业道德法律修养 选择题真题汇总
- QlikView的应用
- 钻井工高级(技能操作)
- 基于MC1496集成模拟乘法器的非线性幅度调制电路原理
- 学习缠论心得
- 工程地质学试题库
- 国家科学技术进步奖公示内容-中国科学院软件研究所
- 软件工程习题及解答3
- 人民防空知识测试题
- 浅谈智慧园林在生态文明建设中的作用和意义
- CQCCMS2.0产品认证管理系统操作指南-质量技术负责人平台分册
- 信息安全项目解决方案word
- 小学生必背古诗360首 - 图文