商務(wù)網(wǎng)站制作語(yǔ)言基礎(chǔ)seo平臺(tái)怎么樣
51單片機(jī)PCF8591數(shù)字電壓表LCD1602液晶設(shè)計(jì)
( proteus仿真+程序+設(shè)計(jì)報(bào)告+講解視頻)
仿真圖proteus7.8及以上
程序編譯器:keil 4/keil 5
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):S0060
51單片機(jī)PCF8591數(shù)字電壓表LCD1602液晶設(shè)計(jì)
- 1.主要功能:
- 講解視頻:
- 2.仿真
- 3. 程序代碼
- 4. 設(shè)計(jì)報(bào)告
- 5. 設(shè)計(jì)資料內(nèi)容清單&&下載鏈接
- 資料下載鏈接(可點(diǎn)擊):
1.主要功能:
基于51單片機(jī)AT89C51/52(與AT89S51/52、AT89C51/52、STC89C51/52等51內(nèi)核單片機(jī)通用)
基于51單片機(jī)的數(shù)字電壓表設(shè)計(jì)
1.采用PCF8591實(shí)現(xiàn)AD采樣功能;
2.采樣電壓范圍0-5V;
3.用數(shù)碼管顯示轉(zhuǎn)換后的實(shí)際電壓值
4.顯示保留小數(shù)點(diǎn)后兩位。
需注意仿真中51單片機(jī)芯片是兼容的,AT89C51,AT89C52是51單片機(jī)的具體型號(hào),內(nèi)核是一樣的。相同的原理圖里,無(wú)論stc還是at都一樣,引腳功能都是一樣的,程序是兼容的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機(jī)芯片。
講解視頻:
仿真講解+代碼講解
51單片機(jī)PCF8591數(shù)字電壓表LCD1602液晶 ( proteus仿真+程序+報(bào)告+講解)
2.仿真
開始仿真
打開仿真工程,雙擊proteus中的單片機(jī),選擇hex文件路徑,然后開始仿真。
3. 程序代碼
使用keil4或者keil5編譯,代碼有注釋,可以結(jié)合報(bào)告理解代碼含義。
IIC通信部分函數(shù)
/*******************************************************************起動(dòng)總線函數(shù)
函數(shù)原型: void Start_I2c();
功能: 啟動(dòng)I2C總線,即發(fā)送I2C起始條件.
********************************************************************/
void Start_I2c()
{sda=1; /*發(fā)送起始條件的數(shù)據(jù)信號(hào)*/_nop_();scl=1;_nop_(); /*起始條件建立時(shí)間大于4.7us,延時(shí)*/_nop_();_nop_();_nop_();_nop_(); sda=0; /*發(fā)送起始信號(hào)*/_nop_(); /* 起始條件鎖定時(shí)間大于4μs*/_nop_();_nop_();_nop_();_nop_(); scl=0; /*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) */_nop_();_nop_();
}/*******************************************************************結(jié)束總線函數(shù)
函數(shù)原型: void Stop_I2c();
功能: 結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件.
********************************************************************/
void Stop_I2c()
{sda=0; /*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)*/_nop_(); /*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/scl=1; /*結(jié)束條件建立時(shí)間大于4μs*/_nop_();_nop_();_nop_();_nop_();_nop_();sda=1; /*發(fā)送I2C總線結(jié)束信號(hào)*/_nop_();_nop_();_nop_();_nop_();
}/*******************************************************************字節(jié)數(shù)據(jù)發(fā)送函數(shù)
函數(shù)原型: void I2C_SendByte(UCHAR c);
功能: 將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對(duì)此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0) 發(fā)送數(shù)據(jù)正常,ack=1; ack=0表示被控器無(wú)應(yīng)答或損壞。
********************************************************************/
void I2C_SendByte(unsigned char c)
{unsigned char i;for(i=0;i<8;i++) /*要傳送的數(shù)據(jù)長(zhǎng)度為8位*/{if((c<<i)&0x80)sda=1; /*判斷發(fā)送位*/else sda=0; _nop_();scl=1; /*置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位*/_nop_(); _nop_(); /*保證時(shí)鐘高電平周期大于4μs*/_nop_();_nop_();_nop_(); scl=0; }_nop_();_nop_();sda=1; /*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/_nop_();_nop_(); scl=1;_nop_();_nop_();_nop_();if(sda==1)ack=0; else ack=1; /*判斷是否接收到應(yīng)答信號(hào)*/scl=0;_nop_();_nop_();
}/*******************************************************************字節(jié)數(shù)據(jù)接收函數(shù)
函數(shù)原型: UCHAR I2C_RcvByte();
功能: 用來(lái)接收從器件傳來(lái)的數(shù)據(jù),并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),發(fā)完后請(qǐng)用應(yīng)答函數(shù)應(yīng)答從機(jī)。
********************************************************************/
unsigned char I2C_RcvByte()
{unsigned char retc=0,i; sda=1; /*置數(shù)據(jù)線為輸入方式*/for(i=0;i<8;i++){_nop_(); scl=0; /*置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/_nop_();_nop_(); /*時(shí)鐘低電平周期大于4.7μs*/_nop_();_nop_();_nop_();scl=1; /*置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/_nop_();_nop_();retc=retc<<1;if(sda==1)retc=retc+1; /*讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中 */_nop_();_nop_(); }scl=0; _nop_();_nop_();return(retc);
}
PCF8591部分通信函數(shù)
/************************************************************
* 函數(shù)名 : Pcf8591_SendByte
* 函數(shù)功能 : 寫入一個(gè)控制命令
* 輸入 : addr(器件地址),channel(轉(zhuǎn)換通道)
* 輸出 : 無(wú)
************************************************************/
bit PCF8591_SendByte(unsigned char addr,unsigned char channel)
{Start_I2c(); //啟動(dòng)總線I2C_SendByte(addr); //發(fā)送器件地址if(ack==0)return(0);I2C_SendByte(0x40|channel); //發(fā)送控制字節(jié)if(ack==0)return(0);Stop_I2c(); //結(jié)束總線return(1);
}/************************************************************
* 函數(shù)名 : PCF8591_RcvByte
* 函數(shù)功能 : 讀取一個(gè)轉(zhuǎn)換值
* 輸入 :
* 輸出 : dat
************************************************************/
unsigned char PCF8591_RcvByte(unsigned char addr)
{ unsigned char dat;Start_I2c(); //啟動(dòng)總線I2C_SendByte(addr+1); //發(fā)送器件地址if(ack==0)return(0);dat=I2C_RcvByte(); //讀取數(shù)據(jù)0Ack_I2c(1); //發(fā)送非應(yīng)答信號(hào)Stop_I2c(); //結(jié)束總線return(dat);
}
主函數(shù)
main()
{ init_1602();while(1){/********以下AD-DA處理*************/ PCF8591_SendByte(AddWr,0); //啟動(dòng)轉(zhuǎn)換D[0]=PCF8591_RcvByte(AddWr); //讀轉(zhuǎn)換完的數(shù)字信號(hào),ADC0 模數(shù)轉(zhuǎn)換 范圍是256-0;vol_value = PCF8591_RcvByte(AddWr); //0-256vol_value = vol_value*5.0*100/256;//得到范圍是500-0,方便顯示dis[8] = (vol_value%1000)/100+0x30; //百dis[10] = (vol_value%100)/10+0x30; //十dis[11] = vol_value%10+0x30; write_string(1,0,dis);
// write_string(1,5,"ab cd ef;");}
}
4. 設(shè)計(jì)報(bào)告
5246字設(shè)計(jì)報(bào)告,內(nèi)容包括硬件設(shè)計(jì)、軟件設(shè)計(jì)、軟硬件框圖、調(diào)試、結(jié)論等
5. 設(shè)計(jì)資料內(nèi)容清單&&下載鏈接
資料設(shè)計(jì)資料包括仿真,程序代碼、講解視頻、功能要求、設(shè)計(jì)報(bào)告、軟硬件設(shè)計(jì)框圖等。
0、常見使用問(wèn)題及解決方法–必讀!!!!
1、仿真圖
2、程序源碼
3、功能要求
4、開題報(bào)告
5、設(shè)計(jì)報(bào)告
6、軟硬件流程框圖
7、講解視頻
Altium Designer 軟件資料
KEIL軟件資料
Proteus軟件資料
單片機(jī)學(xué)習(xí)資料
答辯技巧
設(shè)計(jì)報(bào)告常用描述
鼠標(biāo)雙擊打開查找更多51 STM32單片機(jī)課程畢業(yè)設(shè)計(jì).url
資料下載鏈接(可點(diǎn)擊):
https://docs.qq.com/doc/DS05VbHNQT2h4REhk