單片機源程序如下:
- #include <stc15f2k60s2.h>//添加STC15單片機頭文件
- unsigned long result,ref; //定義無符號長整形變量result ref
- unsigned char R=0,K=0; //定義無符號整形變量
- void votage() interrupt 0 //外部中斷0服務函數
- {
- if(K>=6) //if判斷語句 如果k>6 k置0
- {
- K=0;
- }
- else
- {
- K++; //k自加
- }
- }
- void ADC_int() interrupt 5 //ADC中斷服務子函數
- {
- if(R==0) //if判斷語句 如果R等于0 執行以下語句
- {
- ADC_CONTR=0x60+K; //ADC控制寄存器設置為0x60+k
- ref=(ADC_RES*256+ADC_RESL)*5.0/1024*100000; //ref變量存儲轉換結果
- R=1; //變量R置1
- ADC_CONTR=0xe8+K; //ADC控制寄存器設置為0xe8+k
- }
- else
- {
- ADC_CONTR=0x67; //ADC控制寄存器設置為0x67
- result=((ADC_RES*256+ADC_RESL)*5.0/1024*100000)/ref*2.5*100000-300; //result變量存儲轉換結果
- R=0;
- ADC_CONTR=0xef; //ADC控制寄存器設置為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 指定數據是存儲在代碼區,數據是在編程的時候跟代碼一起寫入代碼存儲器,運行過程中不能改變;
- //定義的是靜態數組
- unsigned int i,n;//定義無符號整形變量
- P1ASF = 0xFF;//與ADC 相關寄存器P1ASF的值設置為0xFF
- CLK_DIV= 0x20; //ADC時鐘設置為0x20
- IE0=0;
- EADC=EA=EX0=IT0=1; //使能ADC中斷和打開總中斷,打開外部中斷0 設置為下降沿觸發
- ADC_CONTR =0xef; //ADC控制寄存器設置為0xe8
- while(1)
- {
- P7=b[K]; //把靜態數組a的元素值賦給P7口
- n=result / 100000 % 10; //取result的十萬位賦給n 比如result是946782 則除100000后是9 對10求余后是9
- P0=a[0]; //把靜態數組a的元素值賦給P0口
- P2=c[n]; //把靜態數組c的元素值賦給P2口
- for (i=1; i<=5; i++) //for循環 i從1到5
- {
- n=result / d[i-1] % 10;//依次取 result(即ADC轉換結果)的萬位,千位,百位,十位,個位
- P0=a[i];//把靜態數組a的元素值賦給P0口
- P2=b[n];//把靜態數組c的元素值賦給P2口
- }
- }
- }
復制代碼
這個程序貌似我仿真的時候,無結果,求大神指導:
15ADC電壓表.zip
(84.04 KB, 下載次數: 109)
2021-3-4 17:18 上傳
點擊文件名下載附件
|