|
單片機(jī)源程序如下:
- #include <stc15f2k60s2.h>//添加STC15單片機(jī)頭文件
- unsigned long result,ref; //定義無(wú)符號(hào)長(zhǎng)整形變量result ref
- unsigned char R=0,K=0; //定義無(wú)符號(hào)整形變量
- void votage() interrupt 0 //外部中斷0服務(wù)函數(shù)
- {
- if(K>=6) //if判斷語(yǔ)句 如果k>6 k置0
- {
- K=0;
- }
- else
- {
- K++; //k自加
- }
- }
- void ADC_int() interrupt 5 //ADC中斷服務(wù)子函數(shù)
- {
- if(R==0) //if判斷語(yǔ)句 如果R等于0 執(zhí)行以下語(yǔ)句
- {
- ADC_CONTR=0x60+K; //ADC控制寄存器設(shè)置為0x60+k
- ref=(ADC_RES*256+ADC_RESL)*5.0/1024*100000; //ref變量存儲(chǔ)轉(zhuǎn)換結(jié)果
- R=1; //變量R置1
- ADC_CONTR=0xe8+K; //ADC控制寄存器設(shè)置為0xe8+k
- }
- else
- {
- ADC_CONTR=0x67; //ADC控制寄存器設(shè)置為0x67
- result=((ADC_RES*256+ADC_RESL)*5.0/1024*100000)/ref*2.5*100000-300; //result變量存儲(chǔ)轉(zhuǎn)換結(jié)果
- R=0;
- ADC_CONTR=0xef; //ADC控制寄存器設(shè)置為0xef
- }
- }
- void main()
- {
- unsigned int code a[]= {0x01,0x02,0x04,0x08,0x10,0x20},b[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90},c[]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0,0x10},d[]= {10000,1000,100,10,1};
- //code 指定數(shù)據(jù)是存儲(chǔ)在代碼區(qū),數(shù)據(jù)是在編程的時(shí)候跟代碼一起寫入代碼存儲(chǔ)器,運(yùn)行過(guò)程中不能改變;
- //定義的是靜態(tài)數(shù)組
- unsigned int i,n;//定義無(wú)符號(hào)整形變量
- P1ASF = 0xFF;//與ADC 相關(guān)寄存器P1ASF的值設(shè)置為0xFF
- CLK_DIV= 0x20; //ADC時(shí)鐘設(shè)置為0x20
- IE0=0;
- EADC=EA=EX0=IT0=1; //使能ADC中斷和打開(kāi)總中斷,打開(kāi)外部中斷0 設(shè)置為下降沿觸發(fā)
- ADC_CONTR =0xef; //ADC控制寄存器設(shè)置為0xe8
- while(1)
- {
- P7=b[K]; //把靜態(tài)數(shù)組a的元素值賦給P7口
- n=result / 100000 % 10; //取result的十萬(wàn)位賦給n 比如result是946782 則除100000后是9 對(duì)10求余后是9
- P0=a[0]; //把靜態(tài)數(shù)組a的元素值賦給P0口
- P2=c[n]; //把靜態(tài)數(shù)組c的元素值賦給P2口
- for (i=1; i<=5; i++) //for循環(huán) i從1到5
- {
- n=result / d[i-1] % 10;//依次取 result(即ADC轉(zhuǎn)換結(jié)果)的萬(wàn)位,千位,百位,十位,個(gè)位
- P0=a[i];//把靜態(tài)數(shù)組a的元素值賦給P0口
- P2=b[n];//把靜態(tài)數(shù)組c的元素值賦給P2口
- }
- }
- }
復(fù)制代碼
這個(gè)程序貌似我仿真的時(shí)候,無(wú)結(jié)果,求大神指導(dǎo):
15ADC電壓表.zip
(84.04 KB, 下載次數(shù): 109)
2021-3-4 17:18 上傳
點(diǎn)擊文件名下載附件
|
|