欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 為什么我仿真LM016L老是不顯示 [打印本頁]

作者: 9-76    時間: 2020-6-29 09:16
標題: 為什么我仿真LM016L老是不顯示
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>                       //包含必要的頭文件

#define uint unsigned int
#define uchar unsigned char
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}
#define NOP _nop_()


sbit HIGH=P2^3;
sbit LOW=P2^4 ;
sbit AD_CS =P1^0;
sbit SCK=P1^1;
sbit DO=P1^2;
sbit DI=P1^2;
sbit RS=P2^0;
sbit RW=P2^1;
sbit E =P2^2;                            //必要的位定義

unsigned char adval;
uchar Display_Buffer[] = "000.0KPa";
uchar code Line1[] = "Current Press:";          //初始化所顯示的字符


uchar adc0832(uchar channel)      //讀ADC0832函數,采集并返回
{
    uchar i=0;
    uchar j;
    uint dat2=0;
    uchar ndat=0;
    if(channel==0)channel=2;
    if(channel==1)channel=3;
    AD_CS=0;NOP; NOP;                           //拉低CS端,AD片選
DI=1;NOP; NOP;  
//在第一個脈沖下降之前 DI 必須是高電平,表示啟始信號
    SCK=1;NOP; NOP;
    SCK=0;NOP; NOP;
    SCK=1;                  
DI=channel&0x1;NOP;NOP;
  //在第二和第三個脈沖下降之前 DI 輸入兩位表示通道

    SCK=0;NOP; NOP;
    SCK=1;                  
    DI=(channel>>1)&0x1;NOP; NOP;
    SCK=0;                                  //寫命令完成,DI失去輸入作用
    DI=1;NOP;NOP;   
    dat2=0;
    for(i=0;i<8;i++)                                    //讀出8字節數據
    {
       dat2|=DO;
       SCK=1;NOP; NOP;
       SCK=0;NOP; NOP;
       dat2<<=1;
       if(i==7)
               dat2|=DO;
}

    for(i=0;i<8;i++)
    {
      j=0;
      j=j|DO;
      SCK=1;NOP; NOP;
      SCK=0;NOP; NOP;
      j=j<<7;
      ndat=ndat|j;
      if(i<7)ndat>>=1;
}

    AD_CS=1;
    SCK=0;
    DO=1;
    dat2<<=8;
    dat2|=ndat;
    return(dat2);                                      //返回數據
}


void DelayMS(uint ms)             //延時程序,相應數值為相應毫秒數
{
    uchar i;
    while(ms--)
    {
      for(i=0;i<120;i++);                               //1mS延時
    }  
}


uchar Read_LCD_State()                         //檢測LCD是否“忙”
{
    uchar state;
    RS=0;RW=1;E=1;DelayMS(1);
    state=P0;                                         //返回P0的值
    E= 0;DelayMS(1);
    return state;                                       //返回狀態
}

void LCD_Busy_Wait()
{
    while((Read_LCD_State()&0x80)==0x80);
    DelayMS(5);
}


void LCD_Write_Command(uchar cmd)                      //寫命令函數
{
     LCD_Busy_Wait();
     RS = 0;
     RW = 0;
     E  = 0;
     _nop_();
     _nop_();
     P0 = cmd;                   //將CMD值寫入LCD產生相應的控制
     delay4us();
    E = 1;
     delay4us();
     E = 0;
}

void Set_LCD_Pos(uchar pos)     
{
    LCD_Write_Command(pos | 0x80);
}

void LCD_Write_Data(uchar dat)                        //寫數據函數
{
    LCD_Busy_Wait();
    RS = 1;
    RW = 0;
    E  = 0;
    P0 = dat;
    delay4us();
   E = 1;  
    delay4us();
    E = 0;
}


void LCD_Initialise()                               //LCD初始化函數
{
     LCD_Write_Command(0x38); DelayMS(1);
     LCD_Write_Command(0x0c); DelayMS(1);
     LCD_Write_Command(0x06); DelayMS(1);
     LCD_Write_Command(0x01); DelayMS(1);
}


void Display_LCD_String(uchar p,uchar *s)              //LCD顯示函數
{
    uchar i;
    Set_LCD_Pos(p);
    for(i=0;i<16;i++)
{  
   LCD_Write_Data(s);                                  //調用寫數據函數
       DelayMS(1);  
    }
}


void write_sfm(uchar add,uchar num)                    //分秒函數
{   
     LCD_Write_Command(0x80+0x40+add);
                                            //第行數據指針位置調整
     LCD_Write_Data(0x30+num);  
}


void main()
{     
      uchar c;
      uint bai,sh,ge,xiaoshu;
           long d;                         //為得到小數部分,使用長整形數
      LCD_Initialise();
      DelayMS(10);
      Display_LCD_String(0x00,Line1);
      Display_LCD_String(0x46,Display_Buffer);
      HIGH=0;
           LOW=0;     

     while(1)
     {
          c=adc0832(0);
                   d=c;
                   d=d*10;                         //將數值擴大10倍得到小數
          d=((d-100)*1000/2360)+150;         //將電壓值轉換為壓力值   
          bai=d/1000 ;                                 //分離出百位
          sh=d%1000/100;                               //分離出十位
          ge=d%100/10;                                 //分離出個位
                     xiaoshu=d%10        ;                            //分離出小數位
                    if(c>246)                                  //判斷過壓函數
                   {       HIGH=1;LOW=0;                     //開啟過壓報警燈
                           DelayMS(1) ;
                           write_sfm(6,bai);
                  write_sfm(7,sh);   
                  write_sfm(8,ge);
                           write_sfm(10,xiaoshu);                    //寫數據
                   }
                   else if(c<10)                             //開啟欠壓報警燈                    {
                    {      LOW=1; HIGH=0;
                           write_sfm(6,bai);
                  write_sfm(7,sh);   
                  write_sfm(8,ge);
                           write_sfm(10,xiaoshu);                     //寫數據
                   }
                   else
                   {  
                          HIGH=0;LOW=0;                           //正常狀態,顯示壓力值                                 write_sfm(6,bai);
                 write_sfm(7,sh);   
                 write_sfm(8,ge);
                          write_sfm(10,xiaoshu);
                   }                     
}
}                                                            //程序完
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>                       //包含必要的頭文件

#define uint unsigned int
#define uchar unsigned char
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}
#define NOP _nop_()


sbit HIGH=P2^3;
sbit LOW=P2^4 ;
sbit AD_CS =P1^0;
sbit SCK=P1^1;
sbit DO=P1^2;
sbit DI=P1^2;
sbit RS=P2^0;
sbit RW=P2^1;
sbit E =P2^2;                            //必要的位定義

unsigned char adval;
uchar Display_Buffer[] = "000.0KPa";
uchar code Line1[] = "Current Press:";          //初始化所顯示的字符


uchar adc0832(uchar channel)      //讀ADC0832函數,采集并返回
{
    uchar i=0;
    uchar j;
    uint dat2=0;
    uchar ndat=0;
    if(channel==0)channel=2;
    if(channel==1)channel=3;
    AD_CS=0;NOP; NOP;                           //拉低CS端,AD片選
DI=1;NOP; NOP;  
//在第一個脈沖下降之前 DI 必須是高電平,表示啟始信號
    SCK=1;NOP; NOP;
    SCK=0;NOP; NOP;
    SCK=1;                  
DI=channel&0x1;NOP;NOP;
  //在第二和第三個脈沖下降之前 DI 輸入兩位表示通道

    SCK=0;NOP; NOP;
    SCK=1;                  
    DI=(channel>>1)&0x1;NOP; NOP;
    SCK=0;                                  //寫命令完成,DI失去輸入作用
    DI=1;NOP;NOP;   
    dat2=0;
    for(i=0;i<8;i++)                                    //讀出8字節數據
    {
       dat2|=DO;
       SCK=1;NOP; NOP;
       SCK=0;NOP; NOP;
       dat2<<=1;
       if(i==7)
               dat2|=DO;
}

    for(i=0;i<8;i++)
    {
      j=0;
      j=j|DO;
      SCK=1;NOP; NOP;
      SCK=0;NOP; NOP;
      j=j<<7;
      ndat=ndat|j;
      if(i<7)ndat>>=1;
}

    AD_CS=1;
    SCK=0;
    DO=1;
    dat2<<=8;
    dat2|=ndat;
    return(dat2);                                      //返回數據
}


void DelayMS(uint ms)             //延時程序,相應數值為相應毫秒數
{
    uchar i;
    while(ms--)
    {
      for(i=0;i<120;i++);                               //1mS延時
    }  
}


uchar Read_LCD_State()                         //檢測LCD是否“忙”
{
    uchar state;
    RS=0;RW=1;E=1;DelayMS(1);
    state=P0;                                         //返回P0的值
    E= 0;DelayMS(1);
    return state;                                       //返回狀態
}

void LCD_Busy_Wait()
{
    while((Read_LCD_State()&0x80)==0x80);
    DelayMS(5);
}


void LCD_Write_Command(uchar cmd)                      //寫命令函數
{
     LCD_Busy_Wait();
     RS = 0;
     RW = 0;
     E  = 0;
     _nop_();
     _nop_();
     P0 = cmd;                   //將CMD值寫入LCD產生相應的控制
     delay4us();
    E = 1;
     delay4us();
     E = 0;
}

void Set_LCD_Pos(uchar pos)     
{
    LCD_Write_Command(pos | 0x80);
}

void LCD_Write_Data(uchar dat)                        //寫數據函數
{
    LCD_Busy_Wait();
    RS = 1;
    RW = 0;
    E  = 0;
    P0 = dat;
    delay4us();
   E = 1;  
    delay4us();
    E = 0;
}


void LCD_Initialise()                               //LCD初始化函數
{
     LCD_Write_Command(0x38); DelayMS(1);
     LCD_Write_Command(0x0c); DelayMS(1);
     LCD_Write_Command(0x06); DelayMS(1);
     LCD_Write_Command(0x01); DelayMS(1);
}


void Display_LCD_String(uchar p,uchar *s)              //LCD顯示函數
{
    uchar i;
    Set_LCD_Pos(p);
    for(i=0;i<16;i++)
{  
   LCD_Write_Data(s);                                  //調用寫數據函數
       DelayMS(1);  
    }
}
void write_sfm(uchar add,uchar num)                    //分秒函數
{   
     LCD_Write_Command(0x80+0x40+add);
                                            //第行數據指針位置調整
     LCD_Write_Data(0x30+num);  
}
void main()
{     
      uchar c;
      uint bai,sh,ge,xiaoshu;
           long d;                         //為得到小數部分,使用長整形數
      LCD_Initialise();
      DelayMS(10);
      Display_LCD_String(0x00,Line1);
      Display_LCD_String(0x46,Display_Buffer);
      HIGH=0;
           LOW=0;     
     while(1)
     {
          c=adc0832(0);
                   d=c;
                   d=d*10;                         //將數值擴大10倍得到小數
          d=((d-100)*1000/2360)+150;         //將電壓值轉換為壓力值   
          bai=d/1000 ;                                 //分離出百位
          sh=d%1000/100;                               //分離出十位
          ge=d%100/10;                                 //分離出個位
                     xiaoshu=d%10        ;                            //分離出小數位
                    if(c>246)                                  //判斷過壓函數
                   {       HIGH=1;LOW=0;                     //開啟過壓報警燈
                           DelayMS(1) ;
                           write_sfm(6,bai);
                  write_sfm(7,sh);   
                  write_sfm(8,ge);
                           write_sfm(10,xiaoshu);                    //寫數據
                   }
                   else if(c<10)                             //開啟欠壓報警燈                    {
                    {      LOW=1; HIGH=0;
                           write_sfm(6,bai);
                  write_sfm(7,sh);   
                  write_sfm(8,ge);
                           write_sfm(10,xiaoshu);                     //寫數據
                   }
                   else
                   {  
                          HIGH=0;LOW=0;                           //正常狀態,顯示壓力值                                 write_sfm(6,bai);
                 write_sfm(7,sh);   
                 write_sfm(8,ge);
                          write_sfm(10,xiaoshu);
                   }                     
}
}                                                            //程序完

作者: 不要黑    時間: 2020-6-29 11:05
看著也不像有問題的,初始化后的字符顯示不顯示?先單獨測試顯示試一下
作者: 晚安啦    時間: 2020-12-24 09:59
不要黑 發表于 2020-6-29 11:05
看著也不像有問題的,初始化后的字符顯示不顯示?先單獨測試顯示試一下

是設置的電壓的問題么?




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1