久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1986|回復: 1
收起左側

單片機AD0808雙通道,顯示結果出了點問題

[復制鏈接]
ID:393114 發表于 2019-5-2 21:41 | 顯示全部樓層 |閱讀模式
AD0808輸入兩條波形,想要對第二條波形提取峰值,并且顯示在12864上,程序中是顯示第二通道的數據,可是仿真結果卻有問題,希望能幫忙看一下

單片機源程序如下:
  1. #include<reg52.h>
  2. #define uchar  unsigned char
  3. #define unit  unsigned int
  4. #define LCD_databus P0
  5. #define data P1
  6. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;
  7. uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xdf} ;
  8. unsigned char dat[]="0000";
  9. unsigned int AD_value[2],rec[20][2];
  10. unsigned char adc,res,min,xiudai,i,max,n;
  11. unsigned int om,od,dt,RP,MP,tmp;
  12. sbit EN=P2^0;
  13. sbit RW=P2^1;
  14. sbit RS=P2^2;
  15. sbit CS2=P2^3;
  16. sbit CS1=P2^4;
  17. sbit ST=P3^0;
  18. sbit A=P3^7;
  19. sbit OE=P3^1;
  20. sbit EOC=P3^2;
  21. sbit CLK=P3^3;
  22. sbit IN1=P2^5;
  23. sbit IN2=P2^6;
  24. sbit PWM=P2^7;
  25. sbit Key1=P3^4;
  26. sbit Key2=P3^5;
  27. sbit beef=P3^6;
  28. uchar code Hzk[]={  
  29. /*--  文字:  舒  --*/
  30. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  31. 0x10,0x28,0x24,0xE3,0x24,0x28,0x50,0x42,0x42,0x4A,0xD2,0x6A,0x46,0x40,0xC0,0x00,
  32. 0x01,0xF9,0x49,0x4F,0x49,0xF9,0x01,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x00,0x00,

  33. /*--  文字:  張  --*/
  34. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  35. 0x02,0xE2,0x22,0x22,0x3E,0x80,0x80,0xFF,0x80,0xA0,0x90,0x88,0x86,0x80,0x80,0x00,
  36. 0x00,0x43,0x82,0x42,0x3E,0x00,0x00,0xFF,0x40,0x21,0x06,0x08,0x10,0x20,0x40,0x00,

  37. /*--  文字:  壓  --*/
  38. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  39. 0x00,0x00,0xFE,0x02,0x82,0x82,0x82,0x82,0xFA,0x82,0x82,0x82,0x82,0x82,0x02,0x00,
  40. 0x80,0x60,0x1F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x44,0x58,0x40,0x40,0x00,

  41. /*--  文字:  收  --*/
  42. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  43. 0x00,0xFC,0x00,0x00,0xFF,0x00,0x40,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00,
  44. 0x00,0x0F,0x04,0x02,0xFF,0x00,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00,

  45. /*--  文字:  縮  --*/
  46. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  47. 0x20,0x38,0xE7,0x30,0x00,0x8C,0xC4,0x34,0x24,0x25,0xA6,0x64,0x24,0x24,0x2C,0x00,
  48. 0x22,0x27,0x12,0x12,0x01,0x00,0xFF,0x00,0x00,0xFF,0x49,0x49,0x49,0xFF,0x00,0x00,

  49. /*--  文字:  :  --*/
  50. /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
  51. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  52. 0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  53. /*--  文字:  mm  --*/
  54. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  55. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
  56. 0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,

  57. /*--  文字:  H  --*/
  58. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  59. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
  60. 0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,

  61. };
  62. uchar code Ezk[]={





  63. /*--  文字:  0  --*/
  64. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  65. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

  66. /*--  文字:  1  --*/
  67. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  68. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

  69. /*--  文字:  2  --*/
  70. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  71. 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

  72. /*--  文字:  3  --*/
  73. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  74. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

  75. /*--  文字:  4  --*/
  76. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  77. 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

  78. /*--  文字:  5  --*/
  79. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  80. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

  81. /*--  文字:  6  --*/
  82. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  83. 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

  84. /*--  文字:  7  --*/
  85. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  86. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

  87. /*--  文字:  8  --*/
  88. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  89. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,

  90. /*--  文字:  9  --*/
  91. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  92. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
  93. };
  94. void delay1ms(uchar t)  
  95. {
  96.     uchar a,b;
  97.     for(b=t;b>0;b--)
  98.        {
  99.             for(a=110;a>0;a--);
  100.         }          
  101. }
  102. void Positive_dianji()
  103. {
  104.     IN1 = 0;
  105.         IN2 = 1;
  106. }
  107. void Reverse_dianji()
  108. {
  109.     IN1 = 1;
  110.         IN2 = 0;
  111. }
  112. void Stop_dianji()
  113. {
  114.         IN1 = 1;
  115.         IN2 = 1;
  116. }
  117. void Key_Scan()
  118. {
  119.         if(Key1 == 0)
  120.         {
  121.            delay1ms(10);
  122.            if(Key1 == 0)
  123.            {
  124.                      Positive_dianji();
  125.            }
  126.         }
  127. }
  128. void Read_busy()
  129. {
  130.         uchar dat;//狀態信息(判斷是否忙)
  131.         RS=0; // 數據\指令選擇,D/I(RS)=“L” ,表示 DB7∽DB0 為顯示指令數據
  132.         RW=1; //R/W=“H” ,E=“H”數據被讀到DB7∽DB0
  133.         do{
  134.         LCD_databus=0x00;
  135.     EN=1;        //EN下降沿
  136.         dat=LCD_databus;
  137.     EN=0;
  138.     dat=0x80 & dat; //僅當第7位為0時才可操作(判別busy信號)
  139.     }while(!(dat==0x00));
  140. }
  141. void write_LCD_command(uchar value)
  142. {
  143.         Read_busy();
  144.         RS=0;
  145.         RW=0;
  146.         LCD_databus=value;
  147.         EN=1;
  148.         delay1ms(1);
  149.         EN=0;
  150. }
  151. void write_LCD_data(uchar value)
  152. {
  153.         Read_busy();
  154.         RS=1;
  155.         RW=0;
  156.         LCD_databus=value;
  157.         EN=1;
  158.         delay1ms(1);
  159.         EN=0;
  160. }
  161. void Set_page(uchar page)       
  162. {
  163.         page=0xb8|page;
  164.         write_LCD_command(page);
  165. }
  166. void Set_line(uchar startline)
  167. {
  168.         startline=0xc0|startline;
  169.         write_LCD_command(startline);       
  170. }
  171. void Set_lie(uchar lie)
  172. {
  173.         lie=lie&0x3f;
  174.         lie=0x40|lie;
  175.         write_LCD_command(lie);
  176. }
  177. void Setonoff(uchar onoff)
  178. {
  179.         onoff=0x3e|onoff;
  180.         write_LCD_command(onoff);
  181. }
  182. void SelectScreen(uchar screen)
  183. {
  184.         switch(screen)
  185.         {
  186.                 case 0:CS1=0;CS2=0 ;break;
  187.                 case 1:CS1=0;CS2=1 ;break;
  188.                 case 2:CS1=1;CS2=0 ;break;
  189.                 default: break;
  190.         }
  191. }
  192. void ClearScreen(uchar screen)
  193. {
  194.         uchar i,j;
  195.         SelectScreen(screen);
  196.         for(i=0;i<8;i++)
  197.         {
  198.           Set_page(i);
  199.           Set_lie(0);
  200.            for(j=0;j<64;j++)
  201.            {
  202.                 write_LCD_data(0x00);          
  203.            }
  204.         }
  205. }
  206. void Display(uchar ss,uchar page,uchar lie,uchar number)  /*顯示全角漢字*/
  207. {
  208. int i;        //選屏參數,page選頁參數,column選列參數,number選第幾漢字輸出
  209. SelectScreen(ss);
  210. lie=lie&0x3f;
  211. Set_page(page);        //寫上半頁
  212. Set_lie(lie); //控制列
  213. for(i=0;i<16;i++)  //控制16列的數據輸出
  214. {write_LCD_data(Hzk[i+32*number]);} //i+32*number漢字的前16個數據輸出
  215. Set_page(page+1);                 //寫下半頁
  216. Set_lie(lie);           //控制列
  217. for(i=0;i<16;i++)          //控制16列的數據輸出
  218. {write_LCD_data(Hzk[i+32*number+16]);}//i+32*number+16漢字的后16個數據輸出
  219. }
  220. void Displayen(uchar ss,uchar page,uchar lie,uchar number)/*顯示半角漢字和數字和字母*/
  221. {int i;//選屏參數,pagr選頁參數,column選列參數,number選第幾漢字輸出
  222. SelectScreen(ss);
  223. lie=lie&0x3f;
  224. Set_page(page);        //寫上半頁
  225. Set_lie(lie);
  226. for(i=0;i<8;i++)
  227. {write_LCD_data(Ezk[i+16*number]);}
  228. Set_page(page+1);        //寫下半頁
  229. Set_lie(lie);
  230. for(i=0;i<8;i++)
  231. {write_LCD_data(Ezk[i+16*number+8]);}
  232. }

  233. void InitLCD()
  234. {
  235.         Read_busy();
  236.         SelectScreen(0);
  237.         Setonoff(0);
  238.            SelectScreen(0);
  239.         Setonoff(1);
  240.         SelectScreen(0);
  241.         ClearScreen(0);
  242.         Set_line(0);
  243. }
  244. void InitDingshi()
  245. {

  246. TMOD=0x01;
  247. TH0=(65536-150)/256;
  248. TL0=(65536-150)%256;
  249. ET0=1;
  250. TR0=1;
  251. EA=1;
  252. }
  253. void Xianshi()
  254. {
  255. adc=max;//maibo  
  256. tmp=adc*1.96;
  257. om=tmp*0.8;
  258. od=tmp*0.5;
  259. dat[4]=om%10;
  260. om=om/10;                       
  261. dat[5]=om%10;
  262. om=om/10;
  263. dat[6]=om%10;
  264. dat[7]=om/10;
  265. dat[0]=od%10;                       
  266. dat[1]=od/10%10;
  267. dat[2]=od/100%10;
  268. dat[3]=od/1000;
  269. Display(1,2,0,0);
  270. Display(1,2,16,1);
  271. Display(1,2,32,2);
  272. Display(1,2,48,5);
  273. Display(1,4,0,3);
  274. Display(1,4,16,4);
  275. Display(1,4,32,2);
  276. Display(1,4,48,5);
  277. Display(2,4,32,6);
  278. Display(2,4,48,7);
  279. Display(2,2,32,6);
  280. Display(2,2,48,7);
  281. Displayen(2,2,24,dat[4]);
  282. Displayen(2,2,16,dat[5]);
  283. Displayen(2,2,8,dat[6]);
  284. Displayen(2,4,24,dat[0]);
  285. Displayen(2,4,16,dat[1]);
  286. Displayen(2,4,8,dat[2]);
  287. }
  288. void tiqufengzhi()
  289. {
  290. if(max<AD_value[1])
  291.    max=AD_value[1];
  292.    rec[1][1]=max;

  293. }

  294. void main()
  295. {
  296. InitLCD();
  297. InitDingshi();
  298. while(1)
  299. {
  300. Key_Scan();
  301. ST=0;
  302. ST=1;
  303. ST=0;//啟動轉換
  304. while(EOC==0);    //等待轉換結果      
  305. OE=1;   //允許輸出
  306. res=P1;
  307. OE=0;
  308. if(A==0)
  309. {
  310.   AD_value[0]=res;
  311. if(AD_value[0]>180)
  312. {
  313.   Reverse_dianji();
  314. }
  315. }
  316. if(A==1)
  317. {
  318. AD_value[1]=res;
  319. }
  320. A=!A;
  321. tiqufengzhi();
  322. Xianshi();
  323. }               

  324. }
  325. void Timer0() interrupt 1
  326. {
  327. TH0=(65536-150)/256;
  328. TL0=(65536-150)%256;
  329. CLK =~CLK;//ADC0809時鐘信號
  330. PWM =~PWM;
  331. }
復制代碼

全部資料51hei下載地址:
原理圖選ad.zip (277.14 KB, 下載次數: 6)
回復

使用道具 舉報

ID:393114 發表于 2019-5-2 21:47 | 顯示全部樓層
還想請教一個問題,就是怎么在記錄2通道出現波峰的同時,記錄1通道的電壓值,將他們作為一組數據保存起來
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品美女视频 | 韩日在线观看视频 | 精品国产乱码久久久久久丨区2区 | 男女免费观看在线爽爽爽视频 | 日韩国产精品一区二区三区 | 欧美色综合网 | 国产午夜精品一区二区三区在线观看 | 天天插天天操 | 天天看天天干 | 在线视频 亚洲 | 亚洲免费观看视频网站 | 久久久久久久久久久蜜桃 | 日本一道本 | 成人h视频 | 日韩中文字幕视频在线观看 | 日本天天操 | 中文天堂在线一区 | 老外黄色一级片 | 久操伊人 | 我爱操| 在线看91| 孕妇一级毛片 | 免费一区二区三区 | 国产伦精品一区二区三区精品视频 | 久久免费精品视频 | 国产高清一区二区三区 | 久久区二区 | 日本成人福利 | 日韩欧美视频 | 青青草原精品99久久精品66 | 亚洲一区二区三区 | 日韩精品视频一区二区三区 | 国产激情网站 | 欧美中文字幕一区二区三区亚洲 | 中文字字幕在线中文乱码范文 | 日本欧美国产在线 | 国产精品久久久久久久久久久久 | 久久伊人免费视频 | 国产一区二区在线观看视频 | 精品毛片| 中文字幕视频一区 |