直流電子負載設計_第1頁
直流電子負載設計_第2頁
直流電子負載設計_第3頁
直流電子負載設計_第4頁
直流電子負載設計_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、#include<reg52.h>#define uchar unsigned char #define uint unsigned intsbit rs=P30; sbit rw=P31; sbit lcden=P32; /液晶顯示屏相關位定義/sbit AD_OUT=P14;/sbit AD_IN=P15;/sbit AD_CS=P16;/sbit AD_CLOCK=P17;/sbit EOC=P33;sbit DSO=P14;sbit DSI=P15;sbit CS=P16;sbit CLK=P17;sbit DA_IN=P10;sbit DA_CK=P11;sbit DA_

2、CS=P12;unsigned long int value,value1;uchar set;uint a,b,z,temp1,temp_1;/DA輸出變量值float x,y,out=0;uint AD_DAstart;char iset6=0,0,0,0,0,0;uchar code table1="Are you sure "uchar code table2=" to set I? "void delay(uchar x) /延時子程序 uchar i,j; for(i=0;i<x;i+) for(j=0;j<120;j+); /延

3、時120秒 void delay1(uint t) /極短延時 while(t-); void delayms(uint z) /延時函數,參數為zuint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-); /z=1測試為大約1微秒 void write_com(uchar com) /寫命令函數rs=0; /rs置0表示寫命令P0=com; /位聲明,按原理圖接P0口,輸入數據delayms(5); /時序圖中須有thd2時間延時lcden=1; /置高delayms(5); /時序圖中須有thd2時間延時lcden=0; /按時序圖置低void w

4、rite_date(uchar date) /寫數據函數rs=1; /rs置1表示寫數據lcden=0; P0=date; /將數據賦到P0口delayms(5); lcden=1; delayms(5); lcden=0; void led_init() /初始化函數lcden=0;rw=0;write_com(0x38); /顯示模式設置:16X2顯示,5X7點陣,8位數據write_com(0x0c); / 開顯示,關光標,光標不閃爍write_com(0x06); / 寫一個數據后地址指針加一,光標加一write_com(0x01); / 數據指針及數據清0write_com(0x80

5、); / 設置數據地址指針,第一行 write_date(0x53);write_date(0x30+iset1);write_date(0x30+iset2);write_date(0x2e);write_date(0x30+iset4);write_date(0x30+iset5);/uint read2543(uchar port) /AD轉換子程序/uint ad=0,j;/ AD_CLOCK=0;/ AD_CS=0;/EOC=1;/ port<<=4;/ delay1(50); / for(j=0;j<12;j+)/ / if(AD_OUT) / / ad|=0x0

6、1;/ / AD_IN=(bit)(port&0x80);/ AD_CLOCK=1;/ delay1(6);/ AD_CLOCK=0;/ delay1(3);/ port<<=1;/ ad<<=1;/ / AD_CS=1;/ ad>>=1;/ return(ad);/uint Read_TLC2543(uchar CHN)/TLC2543據轉換函數(方法二)/ uchar i,temp;/ uint read_ad_data = 0; /分別存放采集的數據,先清0/ CHN=CHN<<4; /12位格式,選擇高位道導前,單極性/ CLK=

7、0;/ CS=1;/ CS=0; /下降沿,并保持低電平/ temp=CHN; /輸入要轉化的通道/ for(i=0;i<12;i+) /12位數據/ / read_ad_data=read_ad_data<<1; /轉換結果左移一位/ if(temp&0x80)!=0)DSI=1; /送方式、通道控制字 串行輸入/ elseDSI=0;/ if(DSO)read_ad_data=read_ad_data+1; /讀入轉換結果/ CLK =1;/ CLK =0;/ temp=temp<<1; /左移,準備發(fā)送方式,通道控制字下一位/ / CS=1;/ re

8、ad_ad_data=read_ad_data&0x0fff; /屏蔽高四位,因為是12位的轉換結果/ return(read_ad_data);/ uint Read_TLC2543(uchar chanle)/TLC2543數據轉換函數(方法一)uchar i,dah=0,dal=0;uint date;CS=1;CS=0;CLK=0;chanle<<=4;/高低位交換for(i=0;i<4;i+) dah<<=1;if(DSO)dah+;/高四位數據DSI=chanle&0x80;/選擇轉換通道CLK=1;delay(1);CLK=0;cha

9、nle<<=1;DSI=0;/此部不能少!for(i=0;i<8;i+)/轉換的數據低8位 CLK=1;dal<<=1;if(DSO)dal+;CLK=0; CS=1;date=dah;/轉換的數據高四位date<<=8;date=date|dal;/合并12位數據return(date); void adzh() uint ge,shi,x1,x2; /電流檢測測出電流實際值 temp1=Read_TLC2543(0x00); y=temp1*5.0/4096; z=y*100; /輸出AD轉換后的電流值 shi=z/1000; ge=(z/100)

10、%10; x1=(z/10)%10; x2=z%10; write_com(0x80+0x40); /顯示電流值 write_date(0x54); write_date(0x30+shi); write_date(0x30+ge); write_date(0x2e); write_date(0x30+x1); write_date(0x30+x2); write_date(0x41);void adzh_1() /電壓檢測測出電壓實際值 uchar ge,shi,x1,x2; temp_1=Read_TLC2543(0x01); y=temp_1*5.0/4096; /輸出AD轉換后的電壓

11、y=y*4.0; z=y*100; shi=z/1000; ge=(z/100)%10; x1=(z/10)%10; x2=z%10; write_com(0x80+0x40); /顯示電壓值 write_date(0x54); write_date(0x30+shi); write_date(0x30+ge); write_date(0x2e); write_date(0x30+x1); write_date(0x30+x2); write_date(0x56); void Send1456(uint DACdat)uchar i=0;DA_CK=0;delay(2);DA_CS=0;del

12、ay(2);for(i=0;i<12;i+)DA_IN=(bit)(DACdat&0x800);DA_CK=1;DACdat<<=1;DA_CK=0;DA_CS=1;DA_CS=0; void keyscan() /矩陣鍵盤 uchar temp,keycount,num; / 定義局部變量P2=0xfe; / 檢測最上面一行各鍵是否有按鍵按下 temp=P2; / 將P2口的值賦給temp temp=temp&0xf0; / 位與 if(temp!=0xf0) delayms(100); temp=P2; temp=temp&0xf0; if(tem

13、p!=0xf0) /確認被按下,防止抖動 temp=P2; switch(temp) case 0xee: /檢測到7被按下 if(keycount!=0&&keycount!=3) write_date(0x30+7); isetkeycount+=7; break; case 0xde: /檢測到8被按下 if(keycount!=0&&keycount!=3) write_date(0x30+8); isetkeycount+=8; break; case 0xbe: /檢測到9被按下 if(keycount!=0&&keycount!=3

14、) write_date(0x30+9); isetkeycount+=9; break;case 0x7e: /檢測到取消鍵被按下 write_com(0x01); / 數據指針及數據清0 write_com(0x0c); write_com(0x80); write_date(0x53); write_date(0x30+iset1); write_date(0x30+iset2); write_date(0x2e); write_date(0x30+iset4); write_date(0x30+iset5); AD_DAstart=1; while(temp!=0xf0) /松手檢測

15、temp=P2; temp=P2&0xf0; P2=0xfd; / 檢測最二行各鍵是否有按鍵按下 temp=P2; / 將P2口的值賦給temp temp=temp&0xf0; / 位與 if(temp!=0xf0) delayms(100); temp=P2; temp=temp&0xf0; if(temp!=0xf0) /確認被按下,防止抖動 temp=P2; switch(temp) case 0xed: /檢測到4被按下 if(keycount!=0&&keycount!=3) write_date(0x30+4); isetkeycount+=

16、4; break; case 0xdd: /檢測到5被按下 if(keycount!=0&&keycount!=3) write_date(0x30+5); isetkeycount+=5; break; case 0xbd: /檢測到6被按下 if(keycount!=0&&keycount!=3) write_date(0x30+6); isetkeycount+=6; break;case 0x7d: / 選擇電流/write_com(0x86) ;/ write_date(0x41) ;/x=iset1*10+iset2+iset4*0.1+iset5*

17、0.01;/out=x*0.1;/value=1024*out;/tlc5615(value);/ adzh(); a=1; AD_DAstart=1; break; while(temp!=0xf0) /松手檢測 temp=P2; temp=P2&0xf0; P2=0xfb; / 檢測第三行各鍵是否有按鍵按下 temp=P2; / 將P2口的值賦給temp temp=temp&0xf0; / 位與 if(temp!=0xf0) delayms(100); temp=P2; temp=temp&0xf0; if(temp!=0xf0) /確認被按下,防止抖動 temp=

18、P2; switch(temp) case 0xeb: /檢測到1被按下 if(keycount!=0&&keycount!=3) write_date(0x30+1); isetkeycount+=1; break; case 0xdb: /檢測到2被按下 if(keycount!=0&&keycount!=3) write_date(0x30+2); isetkeycount+=2; break; case 0xbb: /檢測到3被按下 if(keycount!=0&&keycount!=3) write_date(0x30+3); iset

19、keycount+=3; break; case 0x7b: / 選擇電壓b=1;/ write_com(0x86) ;/ write_date(0x56);/x=iset1*10+iset2+iset4*0.1+iset5*0.01;/out=x*0.1;/value=1024*out;/ /tlc5615(value);/ adzh_1(); AD_DAstart=1; break; while(temp!=0xf0) /松手檢測 temp=P2; temp=P2&0xf0; P2=0xf7; / 檢測第四行各鍵是否有按鍵按下 temp=P2; / 將P2口的值賦給temp tem

20、p=temp&0xf0; / 位與 if(temp!=0xf0) delayms(100); temp=P2; temp=temp&0xf0; if(temp!=0xf0) /確認被按下,防止抖動 temp=P2; switch(temp) case 0xe7: /檢測到0被按下 if(keycount!=0&&keycount!=3) write_date(0x30); isetkeycount+=0; break; case 0xd7: /檢測到刪除鍵被按下if(keycount<6&&keycount>0) if(keycoun

21、t!=1) keycount-;write_com(0x80+keycount); break; case 0xb7: /檢測到確認鍵被按下 if(set=1) write_com(0x01); / 數據指針及數據清0write_com(0x80);write_date(0x53);write_com(0x0f);write_com(0x80+1);set=0;keycount=1; break; case 0x77: write_com(0x01); / 數據指針及數據清0 write_com(0x80); / 設置數據地址指針,第一行 for(num=0;num<16;num+) write_date(table1num)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論