PCF8591 1602液晶显示

来源:互联网 发布:matlab 矩阵色块图 编辑:程序博客网 时间:2024/06/03 04:43
[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <reg52.h>                  
  2. #include "i2c.h"  
  3. #include "delay.h"  
  4. #include "1602.h"  
  5. #include <stdio.h>  
  6.   
  7. #define AddWr 0x90   //写数据地址   
  8. #define AddRd 0x91   //读数据地址  
  9.   
  10. extern bit ack;  
  11. unsigned char ReadADC(unsigned char Chl);  
  12. bit WriteDAC(unsigned char dat);  
  13. unsigned char count;  
  14. /*------------------------------------------------  
  15.               主程序  
  16. ------------------------------------------------*/  
  17. main()  
  18. {  
  19.    
  20.  unsigned char num=0,i,j;  
  21.  unsigned char temp[7];//定义显示区域临时存储数组  
  22.  float Voltage;        //定义浮点变量  
  23.  LCD_Init();           //初始化液晶  
  24.  DelayMs(20);          //延时有助于稳定  
  25.  LCD_Clear();          //清屏  
  26. TMOD = 0x01;  
  27.  TH0 = 0x3c;  
  28.  TL0 = 0xb0;  
  29.  ET0 = 1;  
  30.  TR0 = 1;  
  31.  EA = 1;  
  32. while (1)              //主循环  
  33.   {  
  34.    
  35.  for(i=0;i<5;i++)//连续读5次,取最后一次,以便读取稳定值  
  36.     num=ReadADC(count);      //读取第1路电压值,范围是0-255  
  37.  Voltage=(float)num*5/256;   //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型  
  38.  sprintf(temp,"CHL%c %3.2f V ",count+0x30,Voltage);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位  
  39.  LCD_Write_String(0,0,temp);  
  40.   
  41.  }  
  42. }  
  43. /*------------------------------------------------  
  44.              读AD转值程序  
  45. 输入参数 Chl 表示需要转换的通道,范围从0-3  
  46. 返回值范围0-255  
  47. ------------------------------------------------*/  
  48. unsigned char ReadADC(unsigned char Chl)  
  49.  {  
  50.    unsigned char Val;  
  51.    Start_I2c();               //启动总线  
  52.    SendByte(AddWr);             //发送器件地址  
  53.      if(ack==0)return(0);  
  54.    SendByte(0x40|Chl);            //发送器件子地址  
  55.      if(ack==0)return(0);  
  56.    Start_I2c();  
  57.    SendByte(AddWr+1);  
  58.       if(ack==0)return(0);  
  59.    Val=RcvByte();  
  60.    NoAck_I2c();                 //发送非应位  
  61.    Stop_I2c();                  //结束总线  
  62.   return(Val);  
  63.  }  
  64.    
  65.  void ISR_time1() interrupt 1  
  66. {  
  67.     unsigned char i;  
  68.           
  69.     EA = 0;  
  70.     //  TMOD = 0x01;  
  71.     TH0 = 0x3c;  
  72.         TL0 = 0xb0;  
  73.         i++;  
  74.         if(i == 20)  
  75.         {  
  76.             i = 0;   
  77.                 count++;  
  78.                 if(count == 4)  
  79.                 {  
  80.                     count = 0;  
  81.                 }  
  82.         }     
  83.         EA = 1;       
  84. }  
  85.   
  86. /*------------------------------------------------  
  87.                写入DA转换数值  
  88. 输入参数:dat 表示需要转换的DA数值,范围是0-255  
  89. ------------------------------------------------*/  
  90. /*bit WriteDAC(unsigned char dat)  
  91. {  
  92.    Start_I2c();               //启动总线  
  93.    SendByte(AddWr);             //发送器件地址  
  94.      if(ack==0)return(0);  
  95.    SendByte(0x40);            //发送器件子地址  
  96.      if(ack==0)return(0);  
  97.    SendByte(dat);             //发送数据  
  98.      if(ack==0)return(0);  
  99.    Stop_I2c();    
  100. }*/ 
0 0