采用ADC0804進行ADC轉換,數碼管進行顯示,并與萬用表數值進行準確度的對比,程序在附件中
調節滑動變阻,萬用表和數碼管顯示相同電壓
注意滑動電阻的精度,精度太低,數碼管第四位一直為0
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (30.81 KB, 下載次數: 52)
下載附件
2021-11-23 00:54 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- sbit adcs = P2^4;
- sbit adrd = P2^5;
- sbit adwr = P2^6;
- sbit intr = P2^7;
- sbit CLK = P3^3;
- double num_int;
- unsigned num_out;
- unsigned char text[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char text_1[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
- void display();
- void delay( )
- {
- unsigned char q, j;
- _nop_();
- _nop_();
- for(q=16;q>0;q--)
- {
- for(j=6;j>0;j--);
- }
- }
- ///////////定時器/////////////////////
- void TimeInitial()
- {
- TMOD=0x10;
- TH1=(65536-200)/256;
- TL1=(65536-200)%256;
- EA=1;
- ET1=1;
- TR1=1;
- }
- void Timer1(void) interrupt 3 using 0
- {
- TH1=(65536-200)/256;
- TL1=(65536-200)%256;
- CLK=~CLK;
- }
- //////////////////////////////////////
- //////////////數碼管顯示///////////////
- void Display(unsigned char value,unsigned char pos) //段選,位選函數
- {
- P2=0x01<<pos;
- P0=value;
- }
- void display() //數碼管顯示函數
- {
-
- Display((text[num_out/1000])&0x7f,0); //1234 +小數點
- // Display((text_1[num_out/1000]),0);
- delay();
- Display(text[num_out%1000/100],1);
- delay();
- Display(text[num_out%100/10],2);
- delay();
- Display(text[num_out%10],3);
- delay();
- }
- ////////////////////////////////////////////
- ////////////////////////主函數//////////////
- void main()
- {
- unsigned char x = 0;
- TimeInitial();
- while(1)
- {
- adcs = 0;
- adwr = 0;
- _nop_();
- adwr = 1;
-
- while(intr);
- P1 = 0xff;
- adcs = 0;
- adrd = 0;
- _nop_();
- x = P1;
- adrd = 1;
-
- num_int = x * (1.0/255)*5000;
- num_out=(int)num_int;
- display();
- }
- }
復制代碼
所有資料51hei附件下載:
實驗7.zip
(94.58 KB, 下載次數: 35)
2021-11-20 10:03 上傳
點擊文件名下載附件
ADC仿真 下載積分: 黑幣 -5
|