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

標題: 可以幫忙看看這個單片機仿真為什么沒結果嗎? [打印本頁]

作者: 一一aaaa    時間: 2022-11-5 16:58
標題: 可以幫忙看看這個單片機仿真為什么沒結果嗎?
#include <reg52.h>                 //調用單片機頭文件
#define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
#define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535

uint dianya;   //電壓

sbit CS=P1^5;                //CS定義為P1口的第3位腳,連接ADC0832CS腳
sbit CLK=P1^6;                //CLK定義為P1口的第4位腳,連接ADC0832CLK腳
sbit DODI=P1^7;                //DODI定義為P1口的第5位腳,連接ADC0832DODI腳
  
sbit rs=P1^0;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit rw=P1^1;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit e =P1^2;         //片選信號   下降沿觸發


/********************************************************************
* 名稱 : delay_uint()
* 功能 : 小延時。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void delay_uint(uint q)
{
        while(q--);
}

/********************************************************************
* 名稱 : write_com(uchar com)
* 功能 : 1602指令函數
* 輸入 : 輸入的指令值
* 輸出 : 無
***********************************************************************/
void write_com(uchar com)
{
         rs=0;             //寫指令
        rw=0;             //對1602寫操作
        P0=com;             //P0口對1602寫指令數據
        delay_uint(25);
        e=1;                 //e=1使能信號
        delay_uint(100);   //延時一下等1602完成操作
        e=0;
}

/********************************************************************
* 名稱 : write_data(uchar dat)
* 功能 : 1602寫數據函數
* 輸入 : 需要寫入1602的數據
* 輸出 : 無
***********************************************************************/
void write_data(uchar dat)
{
         rs=1;             //寫數據
        rw=0;             //對1602寫操作
        P0=dat;                  //P0口對1602寫數據
        delay_uint(25);
        e=1;                 //e=1使能信號
        delay_uint(100);   //延時一下等1602完成操作
        e=0;        
}

/********************************************************************
* 名稱 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
                  write_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
        if(hang==1)   
                write_com(0x80+add);           //1602寫第一行的地址
        else
                write_com(0x80+0x40+add);   //1602寫第二行的地址
        while(1)                                                                                                                 
        {
                if(*p == '\0')  break;        //\0字符串的結尾標志  break結束while循環 結束寫字符
                write_data(*p);            //寫數據
                p++;                    //指針地址加1  
        }        
}

/***********************lcd1602上顯示3位十進制數************************/
void write_lcd3_dy(uchar hang,uchar add,uint date)
{
        if(hang==1)   
                write_com(0x80+add);           //1602寫第一行的地址
        else
                write_com(0x80+0x40+add);  //1602寫第二行的地址
        write_data(0x30+date/100%10);  //顯示百位數
        write_data('.');                           //顯示小數點
        write_data(0x30+date/10%10);   //顯示十位數
        write_data(0x30+date%10);           //顯示個位數        
}

/***********************lcd1602初始化設置************************/
void init_1602()
{
        write_com(0x38);  //顯示模式設置:16×2顯示,5×7點陣,8位數據接口 不檢測忙信號
        write_com(0x0c);  //開顯示 不顯示光標
        write_com(0x06);  //當寫一個字符是,地址指針加 1
        write_string(1,0,"     U=0.00V     ");           //初始化1602顯示
}

/***********讀數模轉換數據*******************/        
//請先了解ADC0832模數轉換的串行協議,再來讀本函數,主要是對應時序圖來理解,本函數是模擬0832的串行協議進行的
unsigned char ad0832read(bit SGL,bit ODD)
{
        unsigned char i=0,value=0;               
        CLK=0;
        DODI=1;
        CS=0;                //開始
        CLK=1;                //第一個上升沿        
        CLK=0;
        DODI=ODD;        //通道選擇
        CLK=1;          //第二個上升沿
        CLK=0;
        DODI=SGL;        //通道選擇
        for(i=0;i<8;i++)
        {
                CLK=1; //下降沿接收數據
                value<<=1;          //8位的數據高位在前
                CLK=0;
                if(DODI==1)          //如果DO為1  
                        value++;  //8位的數據低位置1                                                         
        }
        return value;          //返回0832采集到的數據
}

/****************主函數***************/
void main()
{        
        init_1602();                    //1602初始化
        while(1)
        {
                dianya = ad0832read(1,0);        //采集電壓
                dianya = dianya * 100 / 255 * 5 * 2 ;
                write_lcd3_dy(1,7,dianya);         //顯示電壓
        }
}

1.jpg (204.56 KB, 下載次數: 80)

1.jpg

作者: zhxiufan    時間: 2022-11-6 08:39
上拉電阻排選錯了,應該選共9個引腳的那種,一個公共端接VCC,其余八個接P0口。
作者: 一一aaaa    時間: 2022-11-6 13:16
zhxiufan 發表于 2022-11-6 08:39
上拉電阻排選錯了,應該選共9個引腳的那種,一個公共端接VCC,其余八個接P0口。

對,這樣就可以了
作者: 一一aaaa    時間: 2022-11-6 13:17
zhxiufan 發表于 2022-11-6 08:39
上拉電阻排選錯了,應該選共9個引腳的那種,一個公共端接VCC,其余八個接P0口。

可以再幫忙看看程序嘛,測量電壓,一直都顯示0v,測不出來
作者: 大漠落日    時間: 2022-11-7 15:49
仿真文件發上來




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产在线a | 日韩视频一区在线观看 | 久久久久久久久久久久久九 | 中文字幕精品一区二区三区精品 | 国产成人免费网站 | 久久视频一区 | 久久精品这里 | www精品美女久久久tv | 久久一级 | 日韩高清国产一区在线 | 国产丝袜一区二区三区免费视频 | 91亚洲精品在线 | 欧美一区二区三区一在线观看 | 在线小视频 | 国产乱码精品一区二区三区忘忧草 | 91资源在线 | 四虎影视1304t | 91天堂网| 精品久久1| 欧美色性 | 国产精品成人一区二区三区 | 男女污污动态图 | 亚洲精品久久久久久久不卡四虎 | 国产99在线 | 欧美 | 一区视频| 在线一区| www亚洲免费国内精品 | 91视频一区二区三区 | 亚洲精品v日韩精品 | 一区二区三区四区视频 | www.日本国产 | 亚洲精品乱码久久久久久按摩观 | 99久久久久国产精品免费 | 五月综合久久 | 成人国产免费观看 | 超碰伊人久久 | 日韩精品一区二区三区中文字幕 | 视频一区二区三区中文字幕 | 人人做人人澡人人爽欧美 | 国产精品久久久久久久久久妞妞 | 欧美二区三区 |