視頻鏈接:https://www.bilibili.com/video/BV1jb4y1a7khv
#include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define LCD1602_DATAPINS P0 sbit LCD1602_E=P2^2; sbit LCD1602_RW=P2^1; sbit LCD1602_RS=P2^0; ulong volt;//測量的電壓值 sbit CLK=P3^3;//定義時鐘信號口 sbit DIN=P3^1;//定義2543數(shù)據(jù)寫入口 sbit DOUT=P3^0;//定義2543數(shù)據(jù)讀取口 sbit CS=P3^2;//定義2543片選信號口 void read2543(uchar addr) { uint ad=0; uchar i; CLK=0; CS=0;//片選段,啟動2543 addr<=4;//對地址位預(yù)處理 for(i=0;i12;i++) //12個時鐘走完,完成一次讀取測量 { if(DOUT==1) ad=ad|0x01;//單片機讀取ad數(shù)據(jù) DIN=addr&0x80;//2543讀取測量地址位 CLK=1; ;;;//很短的延時 CLK=0;//產(chǎn)生下降沿,產(chǎn)生時鐘信號 ;;; addr<=1; ad<=1;//將數(shù)據(jù)移位準(zhǔn)備下一位的讀寫 } CS=1;//關(guān)2543 ad?>>=1; volt=ad;//取走轉(zhuǎn)換結(jié)果 volt=volt*1221;//例子的滿量程為5V,轉(zhuǎn)換分辯率為12位(2的12次方=4096) 。即最大值是255,5/4096=1221mV,即例子中的1V代表實際1221mV } /******************************************************************************* * 函 數(shù) 名 : Lcd1602_Delay1ms * 函數(shù)功能 : 延時函數(shù),延時1ms * 輸 入 : c * 輸 出 : 無 * 說 名 : 該函數(shù)是在12MHZ晶振下,12分頻單片機的延時。 *******************************************************************************/ void Lcd1602_Delay1ms(uint c) //誤差 0us { uchar a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 數(shù) 名 : LcdWriteCom * 函數(shù)功能 : 向LCD寫入一個字節(jié)的命令 * 輸 入 : com * 輸 出 : 無 *******************************************************************************/ void LcdWriteCom(uchar com) //寫入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0; //選擇發(fā)送命令 LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定 LCD1602_E = 1; //寫入時序 Lcd1602_Delay1ms(5); //保持時間 LCD1602_E = 0; } /******************************************************************************* * 函 數(shù) 名 : LcdWriteData * 函數(shù)功能 : 向LCD寫入一個字節(jié)的數(shù)據(jù) * 輸 入 : dat * 輸 出 : 無 *******************************************************************************/ void LcdWriteData(uchar dat) //寫入數(shù)據(jù) { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //選擇輸入數(shù)據(jù) LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = dat; //寫入數(shù)據(jù) Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫入時序 Lcd1602_Delay1ms(5); //保持時間 LCD1602_E = 0; } /******************************************************************************* * 函 數(shù) 名 : LcdInit() * 函數(shù)功能 : 初始化LCD屏 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38); //開顯示 LcdWriteCom(0x0c); //開顯示不顯示光標(biāo) LcdWriteCom(0x06); //寫一個指針加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點 } //按指定位置顯示一個字符 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) { Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //當(dāng)要顯示第二行時地址碼+0x40; X |= 0x80; // 算出指令碼 LcdWriteCom(X); //這里不檢測忙信號,發(fā)送地址碼 LcdWriteData(DData); } //按指定位置顯示一串字符 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) { unsigned char ListLength; ListLength = 0; Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]>=0x20) //若到達字串尾則退出 { if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF { DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符 ListLength++; X++; } } } void main() { LcdInit(); DisplayListChar(1,0,"TEST SYSTEM"); DisplayListChar(0,1,"Get:"); read2543(0); while(1) { read2543(0); DisplayOneChar(4,1,(char)(volt/1000000+'0')); DisplayOneChar(5,1,(char)(volt/100000%10+'0')); DisplayOneChar(6,1,(char)(volt/10000%10+'0')); DisplayOneChar(7,1,(char)(volt/1000%10+'0')); Lcd1602_Delay1ms(50); } }
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
電壓表
+關(guān)注
關(guān)注
3文章
318瀏覽量
38908 -
Proteus
+關(guān)注
關(guān)注
79文章
1692瀏覽量
106371 -
模擬信號
+關(guān)注
關(guān)注
8文章
1116瀏覽量
52393
發(fā)布評論請先 登錄
相關(guān)推薦
簡易LED電壓表電路
簡易LED電壓表電路
如圖用發(fā)光二極管點亮個數(shù)來顯示電壓高低的電壓表,它瞬態(tài)反應(yīng)快,且電壓表內(nèi)阻高,顯示直觀。當(dāng)被測
發(fā)表于 11-23 20:48
?3709次閱讀
簡易數(shù)字電壓表的設(shè)計
簡易數(shù)字電壓表的設(shè)計簡易數(shù)字電壓表可以測量0~5CV的8路輸入電壓值,并在4位LED數(shù)碼管上輪流顯示或單路選擇顯示。測量最小分辨率為0.01
發(fā)表于 12-14 17:21
簡易數(shù)字電壓表的設(shè)計
設(shè)計采用計數(shù)器 74LS160、 74LS161、 V-F轉(zhuǎn)換器 LM331、集成運算放大器、 555 定時器、石英晶體震蕩器 和共陽極數(shù)碼管為主要硬件,分析了數(shù)字電壓表的 proteus
發(fā)表于 04-28 15:10
簡易數(shù)字直流電壓表電路及程序
簡易數(shù)字直流電壓表電路及程序
設(shè)計一個簡易數(shù)字直流電壓表。(量程0V-2V、測
發(fā)表于 05-31 15:50
?5801次閱讀
基于Proteus的數(shù)字電壓表仿真設(shè)計
為了提高電壓表的測量精度和性價比,提出了一種以AT89C51單片機為控制核心的,基于Proteus仿真技術(shù)的數(shù)字電壓表設(shè)計方案。詳細介紹了數(shù)字電壓表的硬件電路設(shè)計和軟件編程方法,并
發(fā)表于 01-30 14:24
?337次下載
Proteus之TLC548構(gòu)成的數(shù)字電壓表
Proteus之TLC548構(gòu)成的數(shù)字電壓表,很好的Proteus資料,快來下載不學(xué)習(xí)吧。
發(fā)表于 04-19 09:32
?0次下載
評論