LCD1602+ADC0832数字电压表(asm/c51)

发布者:chaohuangmeitao最新更新时间:2016-09-29 来源: eefocus关键字:LCD1602  ADC0832  数字电压表 手机看文章 扫描二维码
随时随地手机看文章
..................................LCD1602+ADC0832数字电压表(已调试通过LCD1602+ADC0832数字电压表(asm/c51) - 随梦飞翔 - 随梦飞翔).................................

rs bit P2.4

rw bit P2.5
e bit P2.6

clk bit P1.3
do bit P1.4
di bit P1.5
cs bit P1.6

com data 60h
dat data 61h

adcb data 62h
adcs data 63h
adcg data 64h
adc data 65h
chx data 66h

org 0000h
sjmp main
org 0030h
main:mov sp,#30h
  clr f0
  lcall init
  s1:lcall adcx
     lcall hdc
  lcall top
  lcall bot
  ljmp s1

init:mov com,#00111000b
  lcall write_com
  mov com,#00001110b
  lcall write_com
  mov com,#00000110b
  lcall write_com
  mov com,#00000001b
  lcall write_com
  ret

adcx: clr a
     setb cs
  clr clk
  clr cs
  setb di
  setb clk;第一个脉冲
  clr clk
  setb clk;第二个脉冲
  clr clk
  jb p3.0,a1
  cpl f0
  jnb p3.0,$
  a1:mov c,f0
     mov di,c
     setb clk;第三个脉冲
    clr clk
  setb clk
  setb do
  mov r1,#08h
  a2:clr clk
  nop
  mov c,do
  rlc a
  setb clk
  nop
  djnz r1,a2
     mov adc,a
  setb cs
  ret

hdc: mov a,adc
  mov b,#51
  div ab
  mov adcb,a
  mov a,b
  clr c
  subb a,#26
  mov 00h,c
  mov a,b
  mov b,#10
  mul ab
  mov b,#51
  div ab
  jb 00h,h1
  add a,#5
  h1:mov adcs,a
    mov a,b
  clr c
  subb a,#26
  mov 00h,c
  mov a,b
  mov b,#10
  mul ab
  mov b,#51
  div ab
  jb 00h,h2
  add a,#5
  h2:mov adcg,a
    ret
     
write_com:clr rs
     clr rw
    mov p0,com
    lcall delay
    clr e
    setb e
    clr e
    ret
    
write_dat:setb rs
    clr rw
    mov p0,dat
    lcall delay
    clr e
    setb e
    clr e
    ret     

top: mov com,#80h
  lcall write_com
  mov dptr,#tab1
  mov r0,#14
  t4:clr a
     movc a,@a+dptr
  mov dat,a
  lcall write_dat
  inc dptr
  djnz r0,t4
  mov dptr,#tab4
  mov com,#8eh
  lcall write_com
  jb f0,t2
  mov chx,#00h
  sjmp t3
  t2:mov chx,#01h
  t3:mov a,chx
  movc a,@a+dptr
  mov dat,a
  lcall write_dat
  ret

bot: mov com,#0c0h
  lcall write_com
  mov dptr,#tab2
  mov r0,#10
  b1:clr a
    movc a,@a+dptr
  mov dat,a
  lcall write_dat
  inc dptr
  djnz r0,b1
  mov com,#0cah
  lcall write_com
  mov dptr,#tab4
  mov a,adcb
  movc a,@a+dptr
  mov dat,a
  lcall write_dat
  mov a,#10
  movc a,@a+dptr
  mov dat,a
  lcall write_dat
  mov a,adcs
  movc a,@a+dptr
  mov dat,a
  lcall write_dat
  mov a,adcg
  movc a,@a+dptr
  mov dat,a  
  lcall write_dat
  ret

tab1: db "INPUT CHANNEL "
tab2: db " VOLTAGE: "
tab4: db "0123456789."

DELAY:   ;误差 0us
    MOV R6,#13H
DL0:
    MOV R5,#82H
    DJNZ R5,$
    DJNZ R6,DL0
    RET

 end

...................................LCD1602+ADC0832数字电压表(已调试通过LCD1602+ADC0832数字电压表(asm/c51) - 随梦飞翔 - 随梦飞翔).................................

#include
#include
#define uchar unsigned char
#define uint unsigned int;
sbit rs=P2^4;
sbit rw=P2^5;
sbit e=P2^6;  //LCD1602控制端
sbit cs=P1^6;
sbit di=P1^5;
sbit dox=P1^4;
sbit clk=P1^3;//ADC0832控制端
sbit key=P3^0;//测量通道选择按键
uchar code table1[]="INPUT CHANNEL "; //显示数据表
uchar code table2[]=" VOLTAGE: ";
uchar code table3[]="0123456789.";
uchar ge,shi,bai; //显示值存储变量
uchar adc_data;   //A/D转换值存储变量

void delay()   //误差 0us  5ms延时
{
    uchar a,b;
    for(b=19;b>0;b--)
        for(a=130;a>0;a--);
}


void write_dat(uchar dat) //LCD1602写数据
{
 rs=1;
 rw=0;
 P0=dat;
 delay();  //待数据稳定,待LCD1602响应完毕,否则LCD不显示.
 e=0;
 e=1;
 e=0;
}

void write_com(uchar com)//LCD1602写指令
{
 rs=0;
 rw=0;
 P0=com;
 delay();
 e=0;
 e=1;
 e=0;
}

void top()    //LCD1602显示第一行
{
 uchar i;
 write_com(0x80);
 for(i=0;i<14;i++)
 {
  write_dat(table1[i]);
 }
 write_dat(table3[(uchar)(F0)]);
}

void bot()    //LCD1602显示第二行
{
 uchar i;
 write_com(0xc0);
 for(i=0;i<10;i++)
 {
  write_dat(table2[i]);
 }
 write_dat(table3[(uchar)(bai)]);
 write_dat(table3[10]); //显示小数点
 write_dat(table3[(uchar)(shi)]);
 write_dat(table3[(uchar)(ge)]);
}

void init()    //LCD1602初始化
{
 write_com(0x38);
 write_com(0x0e);
 write_com(0x06);
 write_com(0x01);
}

void adc()  //ADC0832转换
{
 uchar i;
 cs=1;
 clk=0;
 cs=0;
 di=1;
 clk=1;//第一个脉冲
 clk=0;
 clk=1;//第二个脉冲
 if(key!=1)    //测量通道转换
 {
  F0=!F0;
  while(key!=1);
 }
 clk=0;
 di=F0;
 clk=1;//第三个脉冲
 clk=0;
 clk=1;
 for(i=0;i<8;i++)
 {
  clk=0;
  adc_data<<=1;
  adc_data|=(uchar)(dox);
  clk=1;
 }
 cs=1;
}

void adx()    //ADC0832数制转换
{
 bai=adc_data/51;
 shi=((adc_data%51)*10)/51;
 ge=((((adc_data%51)*10)%51)*10)/51;
}

void main()
{
 F0=0;
 SP=0x30;
 init();
 while(1)
 {
  adc();
  adx();
  top();
  bot();
  delay();
 }
}

关键字:LCD1602  ADC0832  数字电压表 引用地址:LCD1602+ADC0832数字电压表(asm/c51)

上一篇:DS18B20+LCD1602数字温度传感器
下一篇:LCD12864的串口驱动(asm/c51)

推荐阅读最新更新时间:2024-03-16 15:12

基于MSP430F448单片机的交流数字电压表设计
MSP430F44x系列是TI公司推出的一款超低功耗的16位单片机,其运算速度快而且体积小。片内集成了8路12位A/D、串行通信接口、看门狗定时器、比较器、硬件乘法器等外围设备模块,从而降低了应用电路的复杂程度,提高了系统的可靠性。该芯片可以工作于2.5 V和3.3 V两种电压下,并且可以处于休眠状态,此时的频率只有32768 Hz,功耗非常低,环境温度范围为-40~+125℃。这些优点非常适合设计便携式,且要求长时间连续工作,环境温度变化宽的智能仪器仪表设备。MSP430F44x系列单片机具有其他单片机无法比拟的优点,用其来实现交流电压的测量是一种很好的设计方案。 1 系统总体方案设计 本系统主要由以下4大模块组成:中央处
[单片机]
基于MSP430F448单片机的交流<font color='red'>数字电压表</font>设计
PCF8574 STC15单片机的驱动程序 LCD1602显示
网上找了很多的的1602程序,结果要么全是ARDUINO和STM32,要么没一个靠谱的,所以决定自己写,测了N久终于写出来了,看上去效果不错哈哈哈哈! (MCU是STC15F2K60S2) 制作出来的实物图如下: 单片机源程序如下: #include pcf8574.h #define WriteADDR 0x4e #define ReadADDR 0x4f #define u8 unsigned char #define CSSet 0x04//EN=1 #define CSReset 0x00//EN=0 #define COMSet 0x08 // RS=0 RW=0 #define DATSet 0x0
[单片机]
PCF8574 STC15单片机的驱动程序 <font color='red'>LCD1602</font>显示
LCD1602液晶显示模块深入详解之软件篇(AVR)
LCD1602液晶显示模块的驱动虽然比七段数码管之类的显示要复杂一些,但实际上也并不是很难,最主要的还是初始化,为什么这么说呢?我们在调试一块新液晶屏的时候,都会先初始化看看有没有光标在闪,没有光标前是一番努力(PROTEUS上也是这么做的),光标出来之后就相对很容易了。 那初始化的流程是怎么样的呢?我们还是看看HD44780的数据手册吧,如下图所示: 可以看到,初始化的主要步骤如下: (1)上电:这特么也算是一个步骤么?是的!如果你用的是其它液晶模块,比如LCD12864,会发现有一个复位引脚,LCD1602是没有复位引脚的,HD44780本身已经有内部复位逻辑。上电后复位其实会做很多事情的,主要如下: a. 清除屏
[单片机]
<font color='red'>LCD1602</font>液晶显示模块深入详解之软件篇(AVR)
LPC2138+LCD1602计数器proteus仿真与源码 添加注释的和改管脚
LPC2138仿真简单计算器的原理图如下(proteus仿真工程文件可到本帖附件中下载)lcd1602液晶显示 LPC2138源程序如下: #define IN_TARGET #include config.h #define LED1 1 18 // P0.18 控制LED1 /********************************************************************************************************* ** 函数名称: IRQ_Exception ** 功能描述: 中断异常处理程序,用户根据需要自己改变程序 *******
[单片机]
LPC2138+<font color='red'>LCD1602</font>计数器proteus仿真与源码 添加注释的和改管脚
单片机GPS定位LCD1602液晶显示经纬度海拔及时间日期实物制作
制作出来的实物图如下: 单片机源程序如下: #include main.h #include LCD1602.h #include GPS.h //定义变量 unsigned char KEY_NUM = 0; bit Page = 0; unsigned char xdata Display_GPGGA_Buffer ; unsigned char xdata Display_GPRMC_Buffer ; bit Flag_OV = 0; bit Flag_Calc_GPGGA_OK = 0; bit Flag_Calc_GPRMC_OK = 0; //****************************
[单片机]
单片机GPS定位<font color='red'>LCD1602</font>液晶显示经纬度海拔及时间日期实物制作
AVR单片机控制LCD1602液晶显示
一、字符型LCD1602介绍 详情请进: http://q.163.com/longfei-mcu/ 以上是LCD1602的图片,这是市面上大多数使用的。LCD1602已很普遍了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样 字符型LCD的引脚定义如下: 图1 HD44780内置了DDRAM、CGROM和CGRAM。 DDRAM就是显示数据RAM,用
[单片机]
AVR单片机控制<font color='red'>LCD1602</font>液晶显示
LCD1602在PIC单片机中的使用程序
#include pic.h __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define rs RA1 #define rw RA2 #define e RA3 const char web ={' ','W','W','W','.','P','I','C','1','6','.','C','O','M',' 
[单片机]
51单片机驱动LCD1602程序设计(C语言)很详细的教程
字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,定义如下表所示: 字符型LCD的引脚定义 HD44780内置了DDRAM、CGROM和CGRAM。DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表: 也就是说想要在LCD1602屏幕的第一行第一列显示一个 A 字,就要向DDRAM的00
[单片机]
51单片机驱动<font color='red'>LCD1602</font>程序设计(C语言)很详细的教程
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved