⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 23.lst

📁 1602LCD显示代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 155          /********************************************************************/
 156          
 157          void lcd_pos(uchar pos)
 158          {                          
 159   1        lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
 160   1      }
 161          
 162          /********************************************************************/
 163          /*                                                                  */
 164          /*  启动ADC转换                                                     */
 165          /*                                                                  */
 166          /********************************************************************/
 167          
 168          void ADC_start() 
 169          {
 170   1          ADC_CS=1;         //一个转换周期开始
 171   1          _nop_(); 
 172   1          ADC_CLK=0;      
 173   1          _nop_();
 174   1          ADC_CS=0;         //CS置0,片选有效
 175   1          _nop_();
 176   1          ADC_DI=1;         //DI置1,起始位
 177   1          _nop_();
 178   1          ADC_CLK=1;        //第一个脉冲
 179   1          _nop_();
C51 COMPILER V7.06   23                                                                    03/25/2008 09:55:11 PAGE 4   

 180   1          ADC_DI=0;         //在负跳变之前加一个DI反转操作
 181   1          _nop_();
 182   1          ADC_CLK=0;      
 183   1          _nop_();      
 184   1      }
 185           
 186          /********************************************************************/
 187          /*                                                                  */
 188          /*AD转换函数                                                        */
 189          /*选择输入通道,输入信号的模式《单端输入,或差分输入》              */
 190          /*模数转换                                                          */
 191          /*                                                                  */
 192          /********************************************************************/
 193                     
 194          int ADC_read(uchar mode)
 195          {
 196   1          uchar i;
 197   1          ADC_start();      //启动转换开始
 198   1          ACC=mode;
 199   1          ADC_DI=ACC1;      //输出控制位1,DI=1,单通道输入,DI=0,差分输入。
 200   1          ADC_CLK=1;        //第二个脉冲
 201   1          _nop_();
 202   1          ADC_DI=0;
 203   1          ADC_CLK=0;
 204   1          _nop_();
 205   1          ADC_DI=ACC0;      //输出控制位0,DI=0,通道0输入,DI=1,通道1输入。
 206   1          ADC_CLK=1;        //第三个脉冲
 207   1          _nop_();
 208   1          ADC_DI=1;
 209   1          ADC_CLK=0;        //输入模式和通道号已经选择完。
 210   1      
 211   1          ADC_CLK=1;        //第四个脉冲
 212   1          ACC=0;                 
 213   1          
 214   1          for(i=8;i>0;i--)  //读取8位数据
 215   1        {                      
 216   2          ADC_CLK=0;        //脉冲下降沿
 217   2         
 218   2          ACC=ACC<<1;
 219   2          ACC0=ADC_DO;      //读取DO端数据
 220   2          _nop_();
 221   2          _nop_();                
 222   2          ADC_CLK=1;                   
 223   2        }
 224   1          ADC_CS=1;         //CS=1,片选无效。
 225   1          return(ACC);
 226   1      }
 227          
 228          /********************************************************************/
 229          /*                                                                  */
 230          /* 数据处理与显示                                                   */
 231          /* 将采集到的数据进行16进制转换为ASCLL码,并送显示。                */
 232          /*                                                                  */
 233          /********************************************************************/
 234          
 235          show_value(uchar ad_data)
 236          
 237          {   
 238   1          dis[2]=ad_data/51;   //AD值转换为3为BCD码,最大为5.00V。
 239   1          dis[2]=dis[2]+0x30;
 240   1          dis[3]=ad_data%51;   //余数暂存
 241   1          dis[3]=dis[3]*10;    //计算小数第一位
C51 COMPILER V7.06   23                                                                    03/25/2008 09:55:11 PAGE 5   

 242   1          dis[1]=dis[3]/51;
 243   1          dis[1]=dis[1]+0x30;
 244   1          dis[3]=dis[3]%51;
 245   1          dis[3]=dis[3]*10;    //计算小数第二位
 246   1          dis[0]=dis[3]/51;                                                                             //
 247   1          dis[0]=dis[0]+0x30;
 248   1      
 249   1          lcd_pos(0x4a);             
 250   1          lcd_wdat(dis[2]);    //整数位显示
 251   1          lcd_pos(0x4c);             
 252   1          lcd_wdat(dis[1]);    //第一位小数显示 
 253   1          lcd_pos(0x4d);             
 254   1          lcd_wdat(dis[0]);    //第二位小数显示                   
 255   1      } 
 256          
 257          /********************************************************************/
 258          /*                                                                  */
 259          /*  主程序                                                          */
 260          /*                                                                  */
 261          /********************************************************************/
 262          
 263          void main()
 264          {
 265   1          uchar i,n;
 266   1          delay(10);                 //延时
 267   1          lcd_init();                //初始化LCD             
 268   1              
 269   1          lcd_pos(0);                //设置显示位置为第一行的第1个字符
 270   1           i = 0;
 271   1          while(dis4[i] != '\0')
 272   1           {                         //显示字符"DIGITALVOLTMETER"
 273   2             lcd_wdat(dis4[i]);
 274   2             i++;
 275   2           }
 276   1      
 277   1          lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 278   1           i = 0;
 279   1          while(dis5[i] != '\0')
 280   1           {
 281   2             lcd_wdat(dis5[i]);      //显示字符" VOLTAGE:  .  V "
 282   2             i++;
 283   2           }
 284   1          
 285   1           while(1)
 286   1           { 
 287   2            n=ADC_read(channel_0);   //采集值送入n
 288   2            show_value(n);           //n中数据处理与显示         
 289   2                      
 290   2            delay(50);               //延时50ms
 291   2           }
 292   1      } 
 293          
 294          /********************************************************************/ 
 295          /*                                                                  */
 296          /*将n=ADC_read(channel_0)改为n=ADC_read(channel_1)即可使用JP6输入   */
 297          /*                                                                  */
 298          /********************************************************************/     
*** WARNING C316 IN LINE 298 OF 3\23.c: unterminated conditionals


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    448    ----
C51 COMPILER V7.06   23                                                                    03/25/2008 09:55:11 PAGE 6   

   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -