找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2429|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STC8單片機(jī)12位AD轉(zhuǎn)換顯示程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:710173 發(fā)表于 2022-9-5 19:11 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
  1. #include<STC8.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long
  5. //***********y延時聲明**************************
  6. void Delay(uint t);
  7. void LCD_Delay(uint t);
  8. //***********LCD1602聲明***********************************
  9. void lcd_init(void);
  10. void DisplayOneChar(uint X, uint Y, uint DData);
  11. //**********************************************
  12. sbit LED0=P7^1;
  13. //**********************************************
  14. uchar xdata table1[]={"                "};
  15. uchar xdata table2[]={"ADC_V:          "};
  16. //**********************************************
  17. uint ADC_Result;uint ADC_count; ulong ADC_sum;uint xdata ADC_data[100]; uint ADC_flag;
  18. void Display_line(uchar y,uchar *DData)
  19. {   
  20.         uchar i;
  21.         for(i=0;i<16;i++)
  22.         {
  23.            if(y==0) DisplayOneChar(i,0,DData[i]);
  24.                 else  if(y==1)  DisplayOneChar(0x40+i,1,DData[i]);
  25.         }
  26. }
  27. void table2_charge()
  28. {
  29.         table2[8]=ADC_Result%10000/1000+0x30;
  30.         table2[9]=ADC_Result%1000/100+0x30;
  31.         table2[10]=ADC_Result%100/10+0x30;
  32.         table2[11]=ADC_Result%10+0x30;
  33. }
  34. void ADC_init()
  35. {
  36.    P1M0 &=0xBF; //設(shè)置 P0.6 為 ADC 口    M1為1,M0為0,高阻輸入   1011 1111   0100 0000
  37.    P1M1 |= 0x40;
  38.    ADCCFG = 0x0f; //設(shè)置 ADC 時鐘為系統(tǒng)時鐘/2/16/16  數(shù)據(jù)左對齊
  39.    ADC_CONTR = 0x8E; //使能 ADC 模塊      使能  1000 1110  通道P0.6
  40.    EADC = 1; //使能 ADC 中斷
  41.    EA = 1;
  42.    ADC_CONTR |= 0x40; //啟動 AD 轉(zhuǎn)換
  43. }
  44. void ADC_filter(uint *P)
  45. {
  46.         uint i,j,temp;
  47.         ulong sum=0;

  48.         
  49.     for(j=0;j<99;j++)
  50.         for(i=0;i<99-j;i++)
  51.         {
  52.                 if(*(P+i)>*(P+i+1))
  53.                 {
  54.                         temp=*(P+i);
  55.                         *(P+i)=*(P+i+1);
  56.                         *(P+i+1)=temp;
  57.                 }
  58.          }
  59.             if(ADC_flag!=0)
  60.         {                for(i=45;i<55;i++)
  61.                 {
  62.                   sum+=P[i];
  63.                 }
  64.                 //ADC_Result=sum/10;
  65.                 ADC_Result=(uint)((float)(sum/10*2.5/4.096));
  66.          }
  67. }
  68. void main()
  69. {
  70.         LED0=0;
  71.         lcd_init();
  72.         ADC_init();
  73.         ADC_count=0;ADC_flag=0;
  74.         while(1)
  75.         {
  76. //            LED0=!LED0;
  77. //                LCD_Delay(5);
  78.                 table2_charge();
  79.                 Display_line(0,table1);
  80.                 Display_line(1,table2);
  81.                 ADC_filter(ADC_data);

  82.         }
  83. }
  84. void ADC_Isr() interrupt 5
  85. {
  86. ADC_CONTR &= ~0x20; //清中斷標(biāo)志
  87. ADC_data[ADC_count]= (ADC_RESL>>4)+ADC_RES*16; //讀取 ADC 結(jié)果
  88. ADC_CONTR |= 0x40; //繼續(xù) AD 轉(zhuǎn)換
  89.         
  90. ADC_count++;

  91. if( ADC_count>100) {ADC_count=0; ADC_flag++; if(ADC_flag>=2) ADC_flag=1;}

  92. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:513213 發(fā)表于 2022-9-8 17:59 | 只看該作者
一下程序呢?
//***********y延時聲明**************************
void Delay(uint t);
void LCD_Delay(uint t);
//***********LCD1602聲明***********************************
void lcd_init(void);
void DisplayOneChar(uint X, uint Y, uint DData);
回復(fù)

使用道具 舉報(bào)

板凳
ID:28625 發(fā)表于 2022-12-2 20:56 | 只看該作者
樓主,沒有完呀
回復(fù)

使用道具 舉報(bào)

地板
ID:28625 發(fā)表于 2022-12-2 20:56 | 只看該作者
沒有完
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表