切换到宽版
  • 3109阅读
  • 12回复

[C51]51 + ADC0804 =电压表 [复制链接]

上一主题 下一主题
离线小陈兔
 

发帖
4834
M币
1105
专家
26
粉丝
277
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-08-25
做了个表: (液晶屏和ADC0804 与51单片机的连接关系请参考sbit,电路连接采用ADC0804的典型接法,关于VREF/2可以选用TL431)


/*MCU = STC89C52RC
CLOCK = 12MHz
ADC = ADC0804
DISPLAYER = LCM1601*/
/************************************************************/
#include <STC89C5xRC.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcm_rs = P3^6;
sbit lcm_e = P3^7;
sbit adc_cs = P3^5;
sbit adc_rd = P3^4;
sbit adc_wr = P3^3;
sbit adc_intr = P3^2;
uint temp, d1, d2, d3, d4;//临时变量和电压值的四位
uint result;//用于临时保存ADC的输出
void ad_init();//初始化ADC
void ad_start();//启动ADC
uint ad_read();//读取ADC输出
void delay(uint n);//延时"n"ms
void write_command(uchar cc);//向液晶屏写命令"cc"
void write_data(uchar dd);//向液晶屏写数据"dd"
void lcm_init();//初始化液晶屏
void display(uchar q, uchar w, uchar e, uchar r);//显示结果
/************************************************************/
void main(){
write_command(0x01);//清屏
lcm_init();//初始化液晶屏
ad_init();//初始化ADC
while(1){
ad_start();//启动ADC
while(adc_intr == 1);
{ result = ad_read();//读取ADC输出
result = result * 200;//输出刻度*最小分辨值的10000倍
d1 = result / 10000;//电压值最高位
result = result % 10000;//除以最高位权重取余数
d2 = result /1000;//电压值的次高位
result = result % 1000;//除以次高位权重取余数
d3 = result /100;//电压值的次低位
result = result % 100;//除以次低位权重取余数
d4 = result / 10;//电压值的最低位;
display(d1, d2, d3, d4);//显示结果 }
}
}
/************************************************************/
void ad_init(){
adc_cs = 1; adc_wr = 1; adc_rd = 1; }


void ad_start(){
//P1 = 0xff; adc_cs = 0; adc_wr = 0; delay(5); adc_cs = 1; adc_wr = 1; delay(100); }


uint ad_read(){
adc_cs = 0; adc_rd = 0; delay(5); temp = P1; adc_rd = 1; adc_cs = 1; adc_wr = 1; return (temp); }


void delay(uint n){
uchar a,b,c; for(c = n; c>0; c--) for(b = 142; b>0; b--) for(a = 2; a>0; a--); }


void write_command(uchar cc){
P0 = cc; lcm_rs = 0; lcm_e = 1; lcm_e = 0; delay(2); }


void write_data(uchar dd){
P0 = dd; lcm_rs = 1; lcm_e = 1; lcm_e = 0; delay(5); }


void lcm_init(){
lcm_e = 0; write_command(0x38);//设置8bit接口模式,2行5*7
write_command(0x0c);//关闭光标,不闪烁
write_command(0x06);//设置输入方式,增量不移位
write_command(0x01);//清屏 }


void display(uchar q, uchar w, uchar e, uchar r){
write_command(0x80 + 0x00);//选中第1个字符对应的RAM地址
write_data(0x30 + q);//显示电压值的最高位
write_command(0x80 + 0x01);//
选中第2个字符对应的RAM地址
write_data('.');//显示小数点
write_command(0x80 + 0x02);//选中第3个字符对应的RAM地址
write_data(0x30 + w);//显示电压值的次高位
write_command(0x80 + 0x03);//选中第4个字符对应的RAM地址
write_data(0x30 + e);//显示电压值的次低位
write_command(0x80 + 0x04);//选中第5个字符对应的RAM地址
write_data(0x30 + r);//显示电压值的最低位
write_command(0x80 + 0x05);//选中第6个字符对应的RAM地址
write_data('V');//显示单位"V" }

/**********************************************************************/
因为ADC只有8bit(0~255共256个刻度),所以当参考电压=2.55V且电源电压=5.1V时,最小分辨值=0.02V.


1V


2V


3V


4V


5V


2.5V


1.8V


2.46V(反正只要输入0.02的倍数,看起来就“一字不差”)
---------------------------------------------------------------
更多作品见:
AT89C2051 + BH1750FVI【照度计】 http://bbs.mydigit.cn/read.php?tid=2513384
AT89S51 + DS18B20【温度计】 http://bbs.mydigit.cn/read.php?tid=2515015
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共10条打赏 ,M币+156 ,专家+1
發騷友 M币 +51 以資鼓勵 2018-08-31
吉米吉米 M币 +5 謝謝分享,求送O(∩_∩)O哈哈~ 2018-08-29
锰子 M币 +13 謝謝分享 2018-08-26
数码家园 M币 +13 - 2018-08-26
温力口 专家 +1 谢谢分享。。。。。大婶厉害。。。。。 2018-08-25
温力口 M币 +13 谢谢分享。。。。。大婶厉害。。。。。 2018-08-25
花生仔 M币 +13 謝謝分享 2018-08-25
红色的狂想 M币 +30 - 2018-08-25
潜隆 M币 +5 謝謝分享 2018-08-25
哈哈猫驴 M币 +13 做的不错高大上感觉;白色背光万用表可以送我了 2018-08-25
离线哈哈猫驴

发帖
19257
M币
2
专家
737
粉丝
744
只看该作者 1楼 发表于: 2018-08-25
请登录后查看
离线小陈兔

发帖
4834
M币
1105
专家
26
粉丝
277
只看该作者 2楼 发表于: 2018-08-25
回 哈哈猫驴 的帖子
请登录后查看
离线widjrerpfnvd

发帖
1128
M币
2079
专家
9
粉丝
37
只看该作者 3楼 发表于: 2018-08-25
离线小陈兔

发帖
4834
M币
1105
专家
26
粉丝
277
只看该作者 4楼 发表于: 2018-08-25
回 widjrerpfnvd 的帖子
请登录后查看
离线温力口

发帖
60313
M币
51283
专家
569
粉丝
909
只看该作者 5楼 发表于: 2018-08-25
请登录后查看
离线widjrerpfnvd

发帖
1128
M币
2079
专家
9
粉丝
37
只看该作者 6楼 发表于: 2018-08-26
离线bxak

发帖
800
M币
325
专家
11
粉丝
91
只看该作者 7楼 发表于: 2018-08-26
请登录后查看
离线小陈兔

发帖
4834
M币
1105
专家
26
粉丝
277
只看该作者 8楼 发表于: 2018-08-26
回 bxak 的帖子
请登录后查看
离线小人儿

发帖
432
M币
238
专家
1
粉丝
49
只看该作者 9楼 发表于: 2018-08-26
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个