×
单片机 > 单片机程序设计 > 详情

51单片机PCF8591四路AD数值LCD1602屏显示源码

发布时间:2021-01-20 发布时间:
|

单片机源程序:

/**********************BST-V51实验开发板例程************************

*  平台:BST-V51 + Keil U3 + STC89C52

*  名称:四路AD数值LCD1602屏显示

*  公司:深圳市亚博软件开发有限公司

*  晶振:11.0592MHZ

******************************************************************/

/*-----------------------------------------------

  名称:IIC协议 PCF8591ADDA转换                  显示有4个,注意只有2个可以调节电压的

  内容:此程序通过IIC协议对DAAD芯片操作,读取电位器的电压通过液晶显示,并输出模拟量,用LED亮度渐变指示

------------------------------------------------*/

#include     //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include //包含NOP空指令函数_nop_();

#include "LCD1602.h"

#include "IIC.h"

#include "stdio.h"

unsigned char TempData[8];

unsigned char showtext[12];

/*------------------------------------------------

                    延时程序

------------------------------------------------*/

void mDelay(unsigned char j)

{

        unsigned int i;

        for(;j>0;j--)

        {

                for(i=0;i<125;i++);

        }

}

/*------------------------------------------------

                    初始化定时器1

------------------------------------------------*/

void Init_Timer1(void)

{

        TMOD |= 0x10;                             

        TH1=0xff;                              /* Init value */

        TL1=0x00;

        EA=1;                      /* interupt enable */

        ET1=1;                     /* enable timer1 interrupt */

        TR1=1;  

}


/*------------------------------------------------

                   主程序

------------------------------------------------*/

void main()

{

        //unsigned char num;                   //DA数模输出变量

        float ADtemp;                //定义中间变量

        

        LCD1602_init();

        mDelay(20);

        Init_Timer1();

                

        LCD_Write_String(0,0,"rank:");        //在第一行显示

        

        while(1)

        { 

                mDelay(20);     //延时用于清晰看出变化

                

                if(ADFlag)      //定时采集输入模拟量

                {

                        ADFlag=0;


                        ADtemp = ReadADC(0)*(5.0/256);

                        

//                        TempData[0]=(unsigned int)(ReadADC(0))*(5/256);//处理0通道电压显示

//                        TempData[1]=(unsigned int)(ReadADC(0))*50/256%10;

//                        TempData[2]=(unsigned int)(ReadADC(0))*500/256%10;

                        sprintf(showtext,"%1.2fV",ADtemp);

                        

                        LCD_Write_String(5,0,showtext);

        

//                        LCD_Write_Char(5,0,TempData[0] + '0');        

//                        LCD_Write_Char(6,0,'.');        

//                        LCD_Write_Char(7,0,TempData[1] + '0');

//                        LCD_Write_Char(8,0,TempData[2] + '0');

//                        LCD_Write_Char(9,0,'V');

                }

        }

}


/*------------------------------------------------

                   定时器中断程序

------------------------------------------------*/

void Timer1_isr(void) interrupt 3 using 1//定时器1执行数码管动态扫描

{


static unsigned int j;

TH1=0xfb;                //重新赋值

TL1=0x00;

j++;

if(j==200) 

    {j=0;ADFlag=1;} //定时置位AD采样标志位

          

……………………


关键字:51单片机  PCF8591  四路AD数值  LCD1602屏显示 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法