標(biāo)題: C51單片機(jī)ADC0804模擬轉(zhuǎn)換Proteus仿真程序 [打印本頁]

作者: joe_2019    時間: 2020-11-7 22:40
標(biāo)題: C51單片機(jī)ADC0804模擬轉(zhuǎn)換Proteus仿真程序
終于把這個模擬給做出來了,體會到了怎么去發(fā)現(xiàn)坑,學(xué)著去填坑,仿真文件供大家參考,謝謝。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. //利用_nop_()的等待命令

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit adwr=P3^2;
  7. sbit adrd=P3^1;
  8. sbit CS=P3^0;
  9. sbit INTR=P3^3;


  10. uchar num;
  11. uchar code display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  12. //共陽極數(shù)碼管的顯示代碼

  13. uchar COM[]={0x01,0x02,0x04,0x08};
  14. //數(shù)碼管的位選代碼

  15. uchar num, num2=0,time[4]={0,0,0,0},val;
  16. float val2;
  17. unsigned int val3;


  18. main()
  19. {
  20. //使用定時器0定時對結(jié)果掃描顯示
  21. TMOD=0x01;  //定時器的工作方式1
  22. TH0=(65536-917)/256;        //定時定義初值       
  23. TL0=(65536-917)%256;               
  24. EA=1;         //總中斷使能打開
  25. ET0=1;        //定時器0中斷
  26. TR0=1;       //定時器0啟動

  27. CS=0; // 啟動轉(zhuǎn)換
  28. while(1)
  29. //此處循環(huán)等待時間到中斷
  30. {
  31. adwr=1;
  32. _nop_();
  33. adwr=0;
  34. _nop_();
  35. adwr=1;


  36. INTR=0;//intr轉(zhuǎn)換完成后自動拉低


  37. //當(dāng)只有一片AD芯片時,可以將CS一直處在低位即可,連續(xù)轉(zhuǎn)換

  38. adrd=1;
  39. _nop_();

  40. adrd=0;
  41. _nop_();

  42. val=P1;
  43. adrd=1;
  44. val2=((val*1.0/255)*5.0);//將數(shù)字量轉(zhuǎn)換為數(shù)值。
  45. val3=val2*1000;//將轉(zhuǎn)化的數(shù)值放大后,分別其對應(yīng)位的值
  46. time[0]=val3/1000;//個位
  47. time[1]=val3%1000/100;//個分位
  48. time[2]=val3%100/10;//十分位
  49. time[3]=val3%10;//千分位

  50. }

  51. }


  52. void Timer_0()  interrupt 1
  53. {

  54.         TH0=(65536-917)/256;        //中斷后計數(shù)器重新賦值       
  55.         TL0=(65536-917)%256;

  56.         num++;
  57.         if (num==10)
  58.                 {num=0;

  59.                 P2=COM[num2];//取反后,位選數(shù)碼管全部熄滅
  60. //共陽極數(shù)碼管時,高電平選通,低電平關(guān)閉

  61.                 P0=0xff;//數(shù)碼管全部低電平,熄滅

  62.                 {
  63.                 if(num2==0)
  64.                         {P0=display[time[num2]]&0x7F;}  //顯示帶小數(shù)點(diǎn)的個位數(shù)

  65.                 else
  66.                         {P0=display[time[num2]];}   
  67.                          }
  68.                 num2++;                              
  69.                 if(num2>=4) num2=0;

  70.         }

  71. }
復(fù)制代碼

所有資料51hei提供下載:
02_ADC轉(zhuǎn)換.zip (89.66 KB, 下載次數(shù): 41)








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1