久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3702|回復: 2
打印 上一主題 下一主題
收起左側

STC15W408AS0-10V電壓測量 LCD1602顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:140644 發表于 2020-1-3 20:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/****LCD1602 *********電壓表測量0-1024PAST*******/
/*************2018 12  28 CODE1844 L283**********/
              #include      <REG52.H>            //按鍵加減輸入數字
              #include      <intrins.H>          //輸出0-10電壓
              #define       uint unsigned int  
              #define       uchar unsigned char
              sfr           P1ASF=0x9D;          //P1口第2功能控制寄存器
              #define       ADC_SPEEDLL 0x00     //540個時鐘  
              #define       Lcd_Bus P3
              sbit          RS=P5^4;             //LCD PIN4
              sbit          RW=P1^7;             //LCD PIN5
              sbit          E=P1^6;              //LCD PIN6
              sbit          OUT1=P1^5;
              float         ADvalue;             //存放AD轉換返回的結果 
              uint          val;
              uint          aa=0;                                      /****RUN FLAG****/
              uchar         code disdt[10]={0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39};
/*------------------延時子程序------------------------*/
              void delay(uint ms)
              {
              uint i,j;
              for(i=0;i<ms;i++)
              for(j=0;j<2000;j++)
              ;
              }    
/*------------------延時子程序------------------------*/
               void delay_1ms(uint x)
               {
               int i, j;
               for (i=0; i<x; i++)
               for (j=0; j<1500; j++);
               }
/*********************************/
               void chk_busy()
              {
               RS=0;
               RW=1;
               E=1;
               Lcd_Bus=0xff;
               while((Lcd_Bus&0x80)==0x80);
               E=0;
               }
/*------------------寫命令到LCD-----------------------*/
               void write_com(uchar cmdcode)
               {
                chk_busy();
                RS=0;
                RW=0;
                E=1;
                Lcd_Bus=cmdcode;
                delay(5);                        /*在數據寫入的時候加入適當的延時*/
                E=0;
                delay(5);
               }
/*-------------------寫數據到LCD----------------------*/
               void write_data(uchar Dispdata)
               {
                chk_busy();
                RS=1;
                RW=0;
                E=1;
                Lcd_Bus=Dispdata;
                delay(5);                        /*在數據寫入的時候加入適當的延時 */
                E=0;
                delay(5);
               }
/*------------------初始化LCD屏-----------------------*/
               void lcd_init()
               {
                write_com(0X38);                 /**/
                delay_1ms(100);
                write_com(0X0E);
                delay_1ms(100);
                write_com(0X06);
               }
/*************************************/
               void dis_play1(uint val)           /*顯示A函數*/
               {
                uint  Data_a,Data_b,Data_c,Data_d;
                Data_a=val/1000;
                Data_b=(val-Data_a*1000)/100;   
                Data_c=(val-Data_a*1000-Data_b*100)/10;
                Data_d=val-Data_a*1000-Data_b*100-Data_c*10;   
                write_com(0X80);                 /*地址*/
                write_data(0X50);                /*P*/
                write_com(0X81);                 /*地址*/
                write_data(0X31);                /*1*/
                write_com(0X82);                 /*地址*/
                write_data(0X3A);                /*1*/                                  
                write_com(0X83);                 /*地址*/
                write_data(disdt[Data_b]);       /*十位*/
                write_com(0X84);                 /*地址*/
                write_data(disdt[Data_c]);       /*個位*/
                write_com(0X85);                 /*地址*/
                write_data(0X2E);                /*.*/
                write_com(0X86);                 /*地址*/
                write_data(disdt[Data_d]);       /*個位*/
                write_com(0X87);                 /*地址*/
                write_data(0X56);                /*V*/
               }  
/*************************************/
               void dis_play2(uint val)           /*顯示A函數*/
               {
                uint  Data_a,Data_b,Data_c,Data_d;
                Data_a=val/1000;
                Data_b=(val-Data_a*1000)/100;   
                Data_c=(val-Data_a*1000-Data_b*100)/10;
                Data_d=val-Data_a*1000-Data_b*100-Data_c*10;   
                write_com(0X88);                 /*地址*/
                write_data(0X53);                /*S*/
                write_com(0X89);                 /*地址*/
                write_data(0X31);                /*1*/
                write_com(0X8A);                 /*地址*/
                write_data(0X3A);                /*1*/                                  
                write_com(0X8B);                 /*地址*/
                write_data(disdt[Data_b]);       /*十位*/
                write_com(0X8C);                 /*地址*/
                write_data(disdt[Data_c]);       /*個位*/
                write_com(0X8D);                 /*地址*/
                write_data(0X2E);                /*.*/
                write_com(0X8E);                 /*地址*/
                write_data(disdt[Data_d]);       /*個位*/
                write_com(0X8F);                 /*地址*/
                write_data(0X56);                /*V*/
               }        
/*************************************/
               void dis_play3(uint val)           /*顯示A函數*/
               {
                uint  Data_a,Data_b,Data_c,Data_d;
                Data_a=val/1000;
                Data_b=(val-Data_a*1000)/100;   
                Data_c=(val-Data_a*1000-Data_b*100)/10;
                Data_d=val-Data_a*1000-Data_b*100-Data_c*10;   
                write_com(0XC0);                 /*地址*/
                write_data(0X50);                /*P*/
                write_com(0XC1);                 /*地址*/
                write_data(0X32);                /*2*/
                write_com(0XC2);                 /*地址*/
                write_data(0X3A);                /*1*/                                  
                write_com(0XC3);                 /*地址*/
                write_data(disdt[Data_b]);       /*十位*/
                write_com(0XC4);                 /*地址*/
                write_data(disdt[Data_c]);       /*個位*/
                write_com(0XC5);                 /*地址*/
                write_data(0X2E);                /*.*/
                write_com(0XC6);                 /*地址*/
                write_data(disdt[Data_d]);       /*個位*/
                write_com(0XC7);                 /*地址*/
                write_data(0X56);                /*V*/
               }  
/*************************************/
               void dis_play4(uint val)           /*顯示A函數*/
               {
                uint  Data_a,Data_b,Data_c,Data_d;
                Data_a=val/1000;
                Data_b=(val-Data_a*1000)/100;   
                Data_c=(val-Data_a*1000-Data_b*100)/10;
                Data_d=val-Data_a*1000-Data_b*100-Data_c*10;   
                write_com(0XC8);                 /*地址*/
                write_data(0X53);                /*S*/
                write_com(0XC9);                 /*地址*/
                write_data(0X32);                /*2*/
                write_com(0XCA);                 /*地址*/
                write_data(0X3A);                /*1*/                                  
                write_com(0XCB);                 /*地址*/
                write_data(disdt[Data_b]);       /*十位*/
                write_com(0XCC);                 /*地址*/
                write_data(disdt[Data_c]);       /*個位*/
                write_com(0XCD);                 /*地址*/
                write_data(0X2E);                /*.*/
                write_com(0XCE);                 /*地址*/
                write_data(disdt[Data_d]);       /*個位*/
                write_com(0XCF);                 /*地址*/
                write_data(0X56);                /*V*/
               }      
/*****************************************/
              unsigned int ADC_P10()             //
              {
               uint i;
               uchar status=0;                   //AD轉換結束標志
               uint  AD_Dat=0;                   //10位AD轉換值
               ADC_CONTR|=0X80;                  //打開ADC轉換電源,第一次使用時要打開內部電源
               for(i=0;i<10000;i++)              //等待電源穩定1ms
               P1ASF|=0X00;                      //0000 0000
               ADC_CONTR=0XE0;                      //1110 0000    通道P1.0
               for(i=0;i<1000;i++)               //如果多通道測量,更換通道后延時200us
               ADC_CONTR|=0X08;                  //啟動AD轉換  0000 1000ADC_START
                while(status==0)                 //等待AD轉換結束
                {
                status=ADC_CONTR&0X10;           //判斷ADC_FLAG是否等于1,
                }
                ADC_CONTR&=0XE7;                 //將ADC_FLAG清零
                AD_Dat=(ADC_RES<<2)|(ADC_RESL&0X03);    //
                return AD_Dat;                   //
               }      
/*****************************************/
              unsigned int ADC_P11()             //
              {
               uint i;
               uchar status=0;                   //AD轉換結束標志
               uint  AD_Dat=0;                   //10位AD轉換值
               ADC_CONTR|=0X80;                  //打開ADC轉換電源,第一次使用時要打開內部電源
               for(i=0;i<10000;i++)              //等待電源穩定1ms
               P1ASF|=0X02;                      //0000 0010
               ADC_CONTR=0XE1;                      //1110 0001
               for(i=0;i<1000;i++)               //如果多通道測量,更換通道后延時200us
               ADC_CONTR|=0X08;                  //啟動AD轉換
                while(status==0)                 //等待AD轉換結束
                {
                status=ADC_CONTR&0X10;           //判斷ADC_FLAG是否等于1,
                }
                ADC_CONTR&=0XE7;                 //將ADC_FLAG清零
                AD_Dat=(ADC_RES<<2)|(ADC_RESL&0X03);    //
                return AD_Dat;                   //
               }
/*****************************************/
              unsigned int ADC_P13()             //
              {
               uint i;
               uchar status=0;                   //AD轉換結束標志
               uint  AD_Dat=0;                   //10位AD轉換值
               ADC_CONTR|=0X80;                  //打開ADC轉換電源,第一次使用時要打開內部電源
               for(i=0;i<10000;i++)              //等待電源穩定1ms
               P1ASF|=0X08;                      //0000 1000
               ADC_CONTR=0XE3;                      //1110 0011   P1.3
               for(i=0;i<1000;i++)               //如果多通道測量,更換通道后延時200us
               ADC_CONTR|=0X08;                  //啟動AD轉換
                while(status==0)                 //等待AD轉換結束
                {
                status=ADC_CONTR&0X10;           //判斷ADC_FLAG是否等于1,
                }
                ADC_CONTR&=0XE7;                 //將ADC_FLAG清零
                AD_Dat=(ADC_RES<<2)|(ADC_RESL&0X03);    //
                return AD_Dat;                   //
               }
/*****************************************/
              unsigned int ADC_P14()             //
              {
               uint i;
               uchar status=0;                   //AD轉換結束標志
               uint  AD_Dat=0;                   //10位AD轉換值
               ADC_CONTR|=0X80;                  //打開ADC轉換電源,第一次使用時要打開內部電源
               for(i=0;i<10000;i++)              //等待電源穩定1ms
               P1ASF|=0X10;                      //0001 0000
               ADC_CONTR=0XE4;                      //1110 0100
               for(i=0;i<1000;i++)               //如果多通道測量,更換通道后延時200us
               ADC_CONTR|=0X08;                  //啟動AD轉換
                while(status==0)                 //等待AD轉換結束
                {
                status=ADC_CONTR&0X10;           //判斷ADC_FLAG是否等于1,
                }
                ADC_CONTR&=0XE7;                 //將ADC_FLAG清零
                AD_Dat=(ADC_RES<<2)|(ADC_RESL&0X03);    //
                return AD_Dat;                   //
               }
/*------------------主循環程序----------------*/      
               void   main( )                    /*主程序開始*/
               {   
               P1M0=0X00;
               P1M1=0X1B;
               P5M0=0X00;
               P5M1=0X00;
               OUT1=0;
               delay(500);
               OUT1=1;
               lcd_init() ;                      /*液晶復位*/
               while(1)
                {
                OUT1=~OUT1;
                ADvalue=ADC_P11()/9;             //采樣P1.1口模擬輸入電壓  9根據輸入電壓,芯片電壓測試得出
                dis_play1(ADvalue);
                delay(10);                         //1023/12  V輸入
                ADvalue=ADC_P10()/9;             //采樣P1.1口模擬輸入電壓  9根據輸入電壓,芯片電壓測試得出
                dis_play2(ADvalue);
                delay(10);
                ADvalue=ADC_P13()/9;             //采樣P1.1口模擬輸入電壓  9根據輸入電壓,芯片電壓測試得出
                dis_play3(ADvalue);
                delay(10);
                ADvalue=ADC_P14()/9;             //采樣P1.1口模擬輸入電壓  9根據輸入電壓,芯片電壓測試得出
                dis_play4(ADvalue);
                delay(10);
                }
               }                                 //主循環
————————————————
版權聲明:本文為CSDN博主「czhaii」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/czhaii/article/details/89790529
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:237354 發表于 2020-1-4 14:03 | 只看該作者
請問基準電壓怎么設置
回復

使用道具 舉報

板凳
ID:140644 發表于 2020-1-7 10:20 | 只看該作者
看STC官方手冊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 视频一区在线观看 | av日韩在线播放 | 精品一区电影 | 国产一区不卡 | 色综合天天天天做夜夜夜夜做 | 噜噜噜噜狠狠狠7777视频 | 日韩欧美在线一区二区 | 干干干操操操 | 日韩伦理一区二区 | 国外激情av| 日韩毛片免费视频 | 欧美精品在线免费 | 亚洲看片网站 | 亚洲欧美在线视频 | 中文字幕亚洲精品 | 久久久91精品国产一区二区三区 | 久久99这里只有精品 | 欧美性一级 | 综合激情av| 国产中文字幕在线 | 国产男女视频 | 2022精品国偷自产免费观看 | av在线播放网站 | 欧美激情精品久久久久久 | 成人在线观看中文字幕 | 91久久综合 | 亚洲高清一区二区三区 | 久久久噜噜噜www成人网 | 欧美日韩电影一区二区 | 黄网址在线观看 | 亚洲日韩中文字幕一区 | 偷拍自拍在线观看 | 二区成人 | 91观看 | 999视频| 五月综合激情网 | 国产欧美一区二区三区在线看 | 一区二区三区四区在线 | 国产中文字幕在线 | 欧美在线观看一区二区 | 久久九九免费 |