|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (66.37 KB, 下載次數(shù): 25)
下載附件
2023-12-30 23:28 上傳
51hei.gif (138.2 KB, 下載次數(shù): 34)
下載附件
2023-5-31 03:42 上傳
單片機(jī)源程序如下:
- #include <REG52.H>
- #include <intrins.h>
- #define uchar unsigned char //宏定義方便以后用
- #define uint unsigned int
- #define ulong unsigned long
- //定義ADC0832的借接口
- sbit ADC_CS = P2^4;
- sbit ADC_Clk = P2^5;
- sbit ADC_DATI = P2^6;
- sbit ADC_DATO = P2^7;
- //定義LED的指示燈接口
- sbit LED_RED = P1^6;
- sbit LED_YELLOW = P1^7;
- //LCD port
- sbit LcdRs= P2^0;
- sbit LcdRw= P2^1;
- sbit LcdEn= P2^2;
- sfr DBPort= 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口
- //L298N 電機(jī)控制接口
- sbit IN1= P1^2;
- sbit IN2= P1^3;
- //向LCD寫入命令或數(shù)據(jù)************************************************************
- #define LCD_COMMAND 0 // Command
- #define LCD_DATA 1 // Data
- #define LCD_CLEAR_SCREEN 0x01 // 清屏
- #define LCD_HOMING 0x02 // 光標(biāo)返回原點(diǎn)
- //設(shè)置顯示模式************************************************************
- #define LCD_SHOW 0x04 //顯示開
- #define LCD_HIDE 0x00 //顯示關(guān)
- #define LCD_CURSOR 0x02 //顯示光標(biāo)
- #define LCD_NO_CURSOR 0x00 //無光標(biāo)
- #define LCD_FLASH 0x01 //光標(biāo)閃動
- #define LCD_NO_FLASH 0x00 //光標(biāo)不閃動
- //內(nèi)部等待函數(shù)**************************************************************************
- unsigned char LCD_Wait(void)
- {
- LcdRs=0;
- LcdRw=1; _nop_();
- LcdEn=1; _nop_();
- //while(DBPort&0x80);//在用Proteus仿真時,注意用屏蔽此語句,在調(diào)用GotoXY()時,會進(jìn)入死循環(huán),
- //可能在寫該控制字時,該模塊沒有返回寫入完備命令,即DBPort&0x80==0x80
- //實際硬件時打開此語句
- LcdEn=0;
- return DBPort;
- }
- void LCD_Write(bit style, unsigned char input)
- {
- LcdEn=0;
- LcdRs=style;
- LcdRw=0; _nop_();
- DBPort=input; _nop_();//注意順序
- LcdEn=1; _nop_();//注意順序
- LcdEn=0; _nop_();
- LCD_Wait();
- }
- void LCD_SetDisplay(unsigned char DisplayMode)
- {
- LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
- }
- //設(shè)置輸入模式************************************************************
- #define LCD_AC_UP 0x02
- #define LCD_AC_DOWN 0x00 // default
- #define LCD_MOVE 0x01 // 畫面可平移
- #define LCD_NO_MOVE 0x00 //default
- void LCD_SetInput(unsigned char InputMode)
- {
- LCD_Write(LCD_COMMAND, 0x04|InputMode);
- }
- //初始化LCD************************************************************
- void LCD_Initial()
- {
- LcdEn=0;
- LCD_Write(LCD_COMMAND,0x38); //8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣
- LCD_Write(LCD_COMMAND,0x38);
- LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //開啟顯示, 無光標(biāo)
- LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
- LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC遞增, 畫面不動
- }
- //************************************************************************
- void GotoXY(unsigned char x, unsigned char y)
- {
- if(y==0)
- LCD_Write(LCD_COMMAND,0x80|x);
- if(y==1)
- LCD_Write(LCD_COMMAND,0x80|(x-0x40));
- }
- void Print(unsigned char *str) //在LCD上顯示數(shù)據(jù),內(nèi)部調(diào)用
- {
- while(*str!='\0')
- {
- LCD_Write(LCD_DATA,*str);
- str++;
- }
- }
- void LCD_Print(unsigned char x, unsigned char y, unsigned char *str) //指定的位置打印指定數(shù)據(jù)
- {
- GotoXY(x,y);
- Print(str);
- }
- void LCD_Print_num(unsigned char x, unsigned char y,long int temp_num) //指定的位置顯示數(shù)值
- {
- uchar temp_tab[7]=0;
- long int num=0;
- uchar i=0;
- num=temp_num;
- GotoXY(x,y);
- if(num<0)
- {
- num=0-num;
- LCD_Write(LCD_DATA,'-');
- }
- temp_tab[0]=num/1000000%10+0x30;
- temp_tab[1]=num/100000%10+0x30;
- temp_tab[2]=num/10000%10+0x30;
- temp_tab[3]=num/1000%10+0x30;
- temp_tab[4]=num/100%10+0x30;
- temp_tab[5]=num/10%10+0x30;
- temp_tab[6]=num%10+0x30;
- for(i=0;i<7;i++)
- {
- if(temp_tab[i]!=0x30)break;
- }
-
- if(i==7)
- {
- LCD_Write(LCD_DATA,0x30);
- }
- else
- {
- while(i<7)
- {
- LCD_Write(LCD_DATA,temp_tab[i]);
- i++;
- }
- }
- }
- /****************************************************************************
- 函數(shù)功能:AD轉(zhuǎn)換子程序
- ****************************************************************************/
- uchar adc0832(uchar temp_CH)
- {
- uchar temp_data = 0x00; //AD值
- uchar i,temp_ad_val1,temp_ad_val2;
- temp_ad_val2 = 0x00;
- temp_ad_val1 = 0x00;
- ADC_Clk = 0; //初始化
- ADC_DATI = 1;
- _nop_();
- ADC_CS = 0;
- _nop_();
- ADC_Clk = 1;
- _nop_();
-
- if ( temp_CH == 0x00 ) //通道選擇
- {
- ADC_Clk = 0;
- ADC_DATI = 1; //通道0的第一位
- _nop_();
- ADC_Clk = 1;
- _nop_();
- ADC_Clk = 0;
- ADC_DATI = 0; //通道0的第二位
- _nop_();
- ADC_Clk = 1;
- _nop_();
- }
- else
- {
- ADC_Clk = 0;
- ADC_DATI = 1; //通道1的第一位
- _nop_();
- ADC_Clk = 1;
- _nop_();
- ADC_Clk = 0;
- ADC_DATI = 1; //通道1的第二位
- _nop_();
- ADC_Clk = 1;
- _nop_();
- }
- ADC_Clk = 0;
- ADC_DATI = 1;
- for( i = 0;i < 8;i++ ) //前讀取8位的值
- {
- _nop_();
- temp_ad_val2 <<= 1;
- ADC_Clk = 1;
- _nop_();
- ADC_Clk = 0;
- if (ADC_DATO)
- temp_ad_val2 |= 0x01;
- else
- temp_ad_val2 |= 0x00;
- }
- for (i = 0; i < 8; i++) //后讀取8位的值
- {
- temp_ad_val1 >>= 1;
- if (ADC_DATO)
- temp_ad_val1 |= 0x80;
- else
- temp_ad_val1 |= 0x00;
- _nop_();
- ADC_Clk = 1;
- _nop_();
- ADC_Clk = 0;
- }
- if (temp_ad_val2 == temp_ad_val1) //比較前8位與后8位的值,如果不相同舍去。若一直出現(xiàn)顯示為零,請將該行去掉
- temp_data = temp_ad_val1;
- _nop_();
- ADC_CS = 1; //釋放ADC0832
- ADC_DATO = 1;
- ADC_Clk = 1;
- return temp_data;
- }
- //*****************************
- //**顯示數(shù)據(jù)
- //*****************************
- void Display_data(void)
- {
- ulong temp=0,temp2=0;
- temp=adc0832(0);
- temp=temp*500/255;//單位放大了100倍
- temp2=temp/100;
- if(temp2)
- {
- LCD_Print_num(4,1,temp2);
- Print(".");
- temp2=temp%100;
- LCD_Print_num(6,1,temp2);
- }
- else
- {
- LCD_Print(4,1,"0.");
- temp2=temp%100;
- LCD_Print_num(6,1,temp2);
- }
- Print("pa");
- Print(" ");
-
-
-
- }
- // 電機(jī)正轉(zhuǎn)
- void come()
- {
- IN1=1;
- IN2=0;
- }
- //電機(jī)倒轉(zhuǎn)
- void back()
- {
- IN1=0;
- IN2=1;
- }
- //電機(jī)停止
- void stop()
- {
- IN1=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
Keil代碼與Proteus仿真下載:
壓力傳感器控制電機(jī)ADC0832.zip
(118.62 KB, 下載次數(shù): 71)
2023-5-28 15:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
一 綜述
近幾年隨著畜牧業(yè)的快速發(fā)展及社會各界對畜牧業(yè)安全質(zhì)量的重點(diǎn)關(guān)注,畜牧業(yè)產(chǎn)品的追蹤溯源已經(jīng)成為學(xué)者們的研究熱點(diǎn),為建立完善的畜牧業(yè)追溯體系需要從源頭著手,在養(yǎng)殖環(huán)節(jié)建立起信息化監(jiān)控系統(tǒng)對養(yǎng)殖場的各環(huán)節(jié)進(jìn)行實時監(jiān)測,并采集每一頭牲畜的全部生命信息進(jìn)行識別、分析及處理。盡管目前已存在一些畜牧業(yè)養(yǎng)殖場的追溯系統(tǒng)對養(yǎng)殖場進(jìn)行實時監(jiān)控,并實現(xiàn)了牲畜養(yǎng)殖的信息化管理,但由于系統(tǒng)的設(shè)計及部署實施中存在著一些弊端限制了畜牧業(yè)養(yǎng)殖場發(fā)展規(guī)模的擴(kuò)大及信息采集工作的效率,近而大大影響了企業(yè)的經(jīng)濟(jì)效益。
|
評分
-
查看全部評分
|