标题: 51单片机PCF8591四路AD数值LCD1602屏显示源码 [打印本页]

作者: 汤且听风云    时间: 2018-4-27 09:32
标题: 51单片机PCF8591四路AD数值LCD1602屏显示源码
单片机源程序:
  1. /**********************BST-V51实验开发板例程************************
  2. *  平台:BST-V51 + Keil U3 + STC89C52
  3. *  名称:四路AD数值LCD1602屏显示
  4. *  公司:深圳市亚博软件开发有限公司
  5. *  晶振:11.0592MHZ
  6. *  说明:免费开源,不提供源代码分析.
  7. ******************************************************************/
  8. /*-----------------------------------------------
  9.   名称:IIC协议 PCF8591ADDA转换                  显示有4个,注意只有2个可以调节电压的
  10.   内容:此程序通过IIC协议对DAAD芯片操作,读取电位器的电压通过液晶显示,并输出模拟量,用LED亮度渐变指示
  11. ------------------------------------------------*/
  12. #include <reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  13. #include <intrins.h> //包含NOP空指令函数_nop_();
  14. #include "LCD1602.h"
  15. #include "IIC.h"
  16. #include "stdio.h"
  17. unsigned char TempData[8];
  18. unsigned char showtext[12];
  19. /*------------------------------------------------
  20.                     延时程序
  21. ------------------------------------------------*/
  22. void mDelay(unsigned char j)
  23. {
  24.         unsigned int i;
  25.         for(;j>0;j--)
  26.         {
  27.                 for(i=0;i<125;i++);
  28.         }
  29. }
  30. /*------------------------------------------------
  31.                     初始化定时器1
  32. ------------------------------------------------*/
  33. void Init_Timer1(void)
  34. {
  35.         TMOD |= 0x10;                             
  36.         TH1=0xff;                              /* Init value */
  37.         TL1=0x00;
  38.         EA=1;                      /* interupt enable */
  39.         ET1=1;                     /* enable timer1 interrupt */
  40.         TR1=1;  
  41. }

  42. /*------------------------------------------------
  43.                    主程序
  44. ------------------------------------------------*/
  45. void main()
  46. {
  47.         //unsigned char num;                   //DA数模输出变量
  48.         float ADtemp;                //定义中间变量
  49.         
  50.         LCD1602_init();
  51.         mDelay(20);
  52.         Init_Timer1();
  53.                
  54.         LCD_Write_String(0,0,"rank:");        //在第一行显示
  55.         
  56.         while(1)
  57.         {
  58.                 mDelay(20);     //延时用于清晰看出变化
  59.                
  60.                 if(ADFlag)      //定时采集输入模拟量
  61.                 {
  62.                         ADFlag=0;

  63.                         ADtemp = ReadADC(0)*(5.0/256);
  64.                         
  65. //                        TempData[0]=(unsigned int)(ReadADC(0))*(5/256);//处理0通道电压显示
  66. //                        TempData[1]=(unsigned int)(ReadADC(0))*50/256%10;
  67. //                        TempData[2]=(unsigned int)(ReadADC(0))*500/256%10;
  68.                         sprintf(showtext,"%1.2fV",ADtemp);
  69.                         
  70.                         LCD_Write_String(5,0,showtext);
  71.         
  72. //                        LCD_Write_Char(5,0,TempData[0] + '0');        
  73. //                        LCD_Write_Char(6,0,'.');        
  74. //                        LCD_Write_Char(7,0,TempData[1] + '0');
  75. //                        LCD_Write_Char(8,0,TempData[2] + '0');
  76. //                        LCD_Write_Char(9,0,'V');
  77.                 }
  78.         }
  79. }

  80. /*------------------------------------------------
  81.                    定时器中断程序
  82. ------------------------------------------------*/
  83. void Timer1_isr(void) interrupt 3 using 1//定时器1执行数码管动态扫描
  84. {

  85. static unsigned int j;
  86. TH1=0xfb;                //重新赋值
  87. TL1=0x00;
  88. j++;
  89. if(j==200)
  90.     {j=0;ADFlag=1;} //定时置位AD采样标志位
  91.          
  92. ……………………

  93. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
【实验52】AD模块.zip (57.88 KB, 下载次数: 124)



作者: 青宁    时间: 2018-8-30 21:11
有仿真图吗?

作者: xueshanfa    时间: 2019-8-19 15:46
不是很明白哦




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1