视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
单片机代码-AD转换电压在1602中显示
2025-09-25 02:57:56 责编:小OO
文档
#include

#include  为了使用这个头文件中的_nop_()延时函数

sbit sda=P2^0; 线

sbit scl=P2^1; 线

s关掉时钟芯片输出 

sbit hc573_sg_le=P2^6;  //对用于锁存段数据的573锁存LE端进行定义

sbit hc573_bit_le=P2^7; 对用于锁存位选通数据的573锁存LE端进行定义

s数据/命令选择端,高电平执行数据操作,低电平执行命令操作

sbit lcd_rw=P1^1; 读/写控制端  高电平读,低电平写

sbit lcd_en=P2^5;  读写控制使能信号,它为高脉冲信号才可执行读写操作

sbit sta7=P0^7;   忙信号检测位,为1则忙,需等待,为0表示空闲

void delay_ms(unsigned int t)  //tms的延时函数

{

 

 

}

void _nop5_() 个机器周期的延时,大约延时5us

{

 

}

void iic_start() 主机发送开始信号的函数

{

   线拉低,以便让SDA线准备变化

   线拉高,准备产生开始信号

   线拉高

 线高电平持续5us,以符合开始信号定义的要求(>4.7us)

   线拉低,产生开始信号

  线低电平持续5us, 以符合开始信号定义的要求(>4us)

}

void iic_stop() 主机发送停止信号的函数

{

  线拉低,以便让SDA线准备变化

  线拉低,准备产生停止信号

  线拉高

 线低电平持续5us,以符合停止信号定义的要求(>4us)

  线拉高,产生停止信号

 线的高电平持续5us, 以符合停止信号定义的要求(>4.7us)

}

void iic_ack()    检测从机应答信号的函数

{

    线拉低,以便让SDA线准备变化

    线拉高,准备检测从机的应答信号

  当SDA为高电平时,则等待从机的应答将SDA拉低

 

 

  如果i自减到0了,从机还没响应,则不再等待,返回

     这种情况极少发生,一般是从机器件出问题了才会发生

    

    从机已经应答,将SDA线拉低了

   线的低电平持续5us,以符合应答信号定义的要求(>4us)

    线拉低,以便让从机把SDA线释放

}

void send_ack()   主机给从机发送应答信号

{

     线拉低,以便让SDA线准备变化

     线拉低,即将发送应答信号给从机

     线拉高,将应答信号发送过去

    线的低电平持续5us,以符合应答信号定义的要求(>4us)

     线拉低,以便让SDA线准备变化

     释放SDA线

}

void iic_send_no_ack()   主机给从机发送非应答信号

{

      线拉低,以便让SDA线准备变化

      线拉高,即将发送非应答信号给从机

      线拉高,将应答信号发送过去

     线的高电平持续5us,以符合非应答信号定义的要求(>4us)

}

void iic_write(unsigned char dat) 主机向从机写操作函数

{

      线拉低,以便让SDA线准备变化

   取字节数据的最高位,发送到SDA线

      发送的数据都是由高位到低位顺序发送的,所以要将所

        需发送的那位移到数据的最高位,以发送到SDA线上

       线拉高,数据被发送过去

}

unsigned char iic_read()  主机向从机读操作的函数

{      

    定义一个字节变量,用来存储读出的从机数据

     

     将位数据不断地往高位移动,将接收到的位数据转换为字节数据

      线拉低,以便让SDA线准备变化

   将接收到的位数据强制转换成字节数据,并存到dat中

       线拉高,接收下一位数据

       数据接收完毕,带数据返回

}

void lcd_busy_check(void)  忙信号检测,忙则等待

{

     读状态操作,为0

    读操作为1

 

     读状态,需为高电平

 

   如果为1则忙,等待...直到为0

}

void lcd_write_cmd(unsigned char cmd) //液晶写命令函数

{

  每次操作之前都要进行忙信号检测

    执行命令操作,为0

    写操作,为0

     送指令到液晶数据端口P0,准备执行命令

    这是一个延时函数,可延时一个机器周期,它在“intrins.h”中  

    高电平,指令送入液晶控制器

    保持一会儿,使指令可靠地送入液晶控制器

    低电平,执行命令

}

void lcd_write_data(unsigned char dat) //液晶写数据函数

{

  每次操作之前都要进行忙信号检测

    执行数据操作,为1

    写操作,为0

     送数据到液晶数据端口P0,准备执行数据操作

    高电平,数据送入液晶液晶数据RAM

    保持一会儿,使显示数据可靠地送入液晶数据RAM

    低电平,显示数据

}

void lcd1602_init()   液晶显示初始化操作

{

    关闭HC573使数码管不显示

   

     为0,为实现高脉冲作准备

  设置为5x7显示

  打开显示-显示光标-光标闪烁

   地址加一,光标右移,整屏显示不移动 

  清屏

}

/*--这个函数的作用是:将读到的8591中的数据换算为电压值的个位值,

----并转换为对应的ASCII码,用以在液晶中显示*/

unsigned char data1_convert(unsigned char dat_temp)

{         

 换算为电压值的个位值

 转换为对应的ASCII码 ,因为0对应ASCII码的48,以此类推

  

}

/*--这个函数的作用是:将读到的8591中的数据换算为电压值的小数点后第一位的值,

----并转换为对应的ASCII码,用以以在液晶中显示*/

unsigned char data0_convert(unsigned char dat_temp)

{

    换算为电压值的个位值

 换算为为电压值的小--

               数点后第一位的那个值

           

            转换为对应的ASCII码  

}

 void main()

 {

     用于接收从8591中读到的数据

 

        关闭DS1302时钟芯片,避免引起干扰

   上面的这些都是为了在1602中显示"CH1: : V"

 

 

   对8591进行写操作

 

    设置为4路信号输入,并关闭通道自动加1,只用通道1

 

    重新开始,为读数据作准备

 

    对8591进行读操作

 

     这还只是一个8位的数据(需进一步转换为实际电压值)

 

 

  

       将要显示的字符显示在此地址处

    显示电压的整数部分

       将要显示的字符显示在此地址处

   显示电压的小数部分

       

 }下载本文

显示全文
专题