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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

可以幫忙看看這個單片機仿真為什么沒結果嗎?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1050626 發表于 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
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:121859 發表于 2022-11-6 08:39 | 只看該作者
上拉電阻排選錯了,應該選共9個引腳的那種,一個公共端接VCC,其余八個接P0口。
回復

使用道具 舉報

板凳
ID:1050626 發表于 2022-11-6 13:16 來自觸屏版 | 只看該作者
zhxiufan 發表于 2022-11-6 08:39
上拉電阻排選錯了,應該選共9個引腳的那種,一個公共端接VCC,其余八個接P0口。

對,這樣就可以了
回復

使用道具 舉報

地板
ID:1050626 發表于 2022-11-6 13:17 來自觸屏版 | 只看該作者
zhxiufan 發表于 2022-11-6 08:39
上拉電阻排選錯了,應該選共9個引腳的那種,一個公共端接VCC,其余八個接P0口。

可以再幫忙看看程序嘛,測量電壓,一直都顯示0v,測不出來
回復

使用道具 舉報

5#
ID:195496 發表于 2022-11-7 15:49 | 只看該作者
仿真文件發上來
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品一区二区三区 | 久久久精品一区二区 | 欧洲一级毛片 | 国产精品2区 | 久久久久无码国产精品一区 | 午夜久久久| a级在线免费视频 | 巨大黑人极品videos精品 | 精品在线一区二区 | 中文字幕亚洲视频 | 亚洲精品一区二区三区蜜桃久 | 三级黄色片在线 | 中文字幕啪啪 | h视频免费看 | 在线播放中文字幕 | 日韩精品免费 | 精品国产91乱码一区二区三区 | 美女视频黄的 | 羞羞网站免费观看 | 精品国产高清一区二区三区 | 久久久免费毛片 | 久久88| 伊人久久麻豆 | 青青草av | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 特级丰满少妇一级aaaa爱毛片 | 免费一级淫片aaa片毛片a级 | 亚洲国产精品激情在线观看 | 国产视频第一页 | 91福利影院 | 国产精品久久福利 | 亚洲精品1 | 亚洲久久一区 | 美女久久久 | 久久国产欧美一区二区三区精品 | 最新av片| 天天干天天插天天 | 成人激情视频 | 先锋资源网站 | 欧美男人天堂 | 精品久久香蕉国产线看观看亚洲 |