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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

AD轉換,單片機C程序現在還缺什么步驟?

[復制鏈接]
ID:276150 發表于 2018-1-17 10:53 | 顯示全部樓層 |閱讀模式
keshe.png

  1. #include <reg51.h>
  2. #include <intrins.h>   //空操作函數_nop_()必須的頭文件
  3. #include <stdio.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #ifndef __1602_H__
  7. #define __1602_H__
  8. sbit lcdrs=P2^0; //1602:0寫指令,1寫數據
  9. sbit lcdwr=P2^1; //1602讀寫信號
  10. sbit lcden=P2^2; //1602片選信號
  11. sbit TLC549_CS = P3^1;  //TLC549片選,低電平有效
  12. sbit TLC549_DO = P3^5;  //TLC549數字量輸出
  13. sbit TLC549_CLK = P3^0;  //TLC549片外獨立時鐘
  14. sbit sta7=P0^7;
  15. unsigned char data1_convert(unsigned char dat_temp)
  16. {
  17. unsigned char data1;  
  18. data1=(unsigned char)(((float)dat_temp/255)*5); //換算為電壓值的個位值
  19. data1=data1+48; //轉換為對應的ASCII碼,因為0對應ASCII碼的48,以此類推
  20. return data1;   
  21. }
  22. unsigned char data0_convert(unsigned char dat_temp)
  23. {  
  24. unsigned char data0,data1;  data1=(unsigned char)(((float)dat_temp/255)*5);     //換算為電壓值的個位值
  25. data0=(unsigned char)((((float)dat_temp/255)*5-data1)*10);//換算為為電壓值的小--  
  26.                                                         //--數點后第一位的那個?
  27. data0=data0+48;            
  28. return data0;             //轉換為對應的ASCII碼
  29. }
  30. void delayus(unsigned int t);  //聲明 延時t個機器 周期
  31. //**********************************
  32. //AD轉換
  33. //**********************************
  34. unsigned char TLC549_read()   
  35. {  
  36. unsigned char i , temp;  
  37. TLC549_CS = 1;    //關閉片選  
  38. TLC549_CLK = 0;    //時鐘線拉低  
  39. TLC549_CS = 0;    //打開片選  
  40. _nop_();  //空操作等待兩個機器周期待總線穩定
  41. _nop_();
  42. for( i = 0; i < 8; i++ )  //循環8次讀出8位轉換結果
  43. {   
  44. temp <<= 1;   
  45. temp |= TLC549_DO;  
  46. TLC549_CLK = 1;
  47. _nop_();   
  48. TLC549_CLK = 0;
  49. }
  50. TLC549_CS = 1;  
  51. delayus(14);  //TLC549轉換速度小于14微秒,大致延時14微秒等待轉換結束  
  52. return temp; //返回轉換值
  53. }
  54. //**********************************
  55. //AD轉換
  56. //**********************************
  57. /*uint n1,ad1;  
  58. uint read_549(void)
  59. {  
  60. uchar i,value;
  61. TLC549_CS=0;
  62. TLC549_CLK=0;
  63. for(i=0;i<8;i++)
  64. {
  65. value=value<<1;
  66. value|=TLC549_DO;
  67. TLC549_CLK=1;
  68. delayus(1);
  69. TLC549_CLK=0;
  70. }
  71. TLC549_CLK=1;
  72. delayus(2);  
  73. return value;
  74. }  
  75. void zhh()
  76. {
  77. uint temp,n2;
  78. n2=(n1/10)%10;
  79. temp=read_549();
  80. n1=temp*3;
  81. if((n1/10)%10-n2==1)
  82. {  
  83. ad1=800;  
  84. }   
  85. }
  86. */
  87. /***********************1ms延時函數**********************/
  88. void delayms(uint ms)
  89. {
  90. uint y;
  91. while(ms--)
  92. {
  93. for(y=0;y<125;y++);
  94. }
  95. }
  96. //******************判忙*********************
  97. void lcd_busy_check(void)   //1602忙信號檢測,忙則等待
  98. {  
  99. P0=0xff;   
  100. do  
  101. {   
  102. lcdrs=0;   //讀狀態操作,為0   
  103. lcdwr=1;      //讀操作為1   
  104. lcden=0;   
  105. lcden=1;   //讀狀態,需為高電平
  106. }   
  107. while (sta7==1);  //如果為1則忙,等待...直到為0   
  108. lcden=0;
  109. }
  110. /***********************LCD寫指令 寫數據**********************/
  111. void LCD_write_cmd(unsigned char cmd) //液晶寫?
  112. {  
  113. lcd_busy_check(); //每次操作之前都要進行忙信號檢測
  114. lcdrs=0;   //執行數據操作,為1  
  115. lcdwr=0;   //寫操作,為0  
  116. P0=cmd;    //送數據到液晶數據端口P0,準備執行數據操?
  117. lcden=1;   //高電平,數據送入液晶液晶數據RAM  
  118. _nop_();  //保持一會兒,使顯示數據可靠地送入液晶數據RAM  
  119. lcden=0;   //低電平,顯示數據
  120. }
  121. void LCD_write_data(unsigned char Data) //液晶寫數據函數
  122. {  
  123. lcd_busy_check(); //每次操作之前都要進行忙信號檢測
  124. lcdrs=1;   //執行數據操作,為1  
  125. lcdwr=0;   //寫操作,為0  
  126. P0=Data;    //送數據到液晶數據端口P0,準備執行數據操作

  127. lcden=1;   //高電平,數據送入液晶液晶數據RAM  
  128. _nop_();   //保持一會兒,使顯示數據可靠地送入液晶數據RAM  
  129. lcden=0;   //低電平,顯示數據
  130. }
  131. /***********************LCD初始化*********************/
  132. void LCD_init()  
  133. {  
  134. delayms(15);
  135. LCD_write_cmd(0x38);
  136. delayms(5);
  137. LCD_write_cmd(0x38);//8位總線、雙行5×7點陣
  138. LCD_write_cmd(0x08);
  139. LCD_write_cmd(0x01);
  140. LCD_write_cmd(0x06);
  141. delayms(5);
  142. LCD_write_cmd(0x0c);
  143. }
  144. /**********************主函數*********************/
  145. void main()  
  146. {  
  147. unsigned char dat;   //用于接收從8591中讀到的數據
  148. LCD_init();
  149. LCD_write_cmd(0x80);  
  150. LCD_write_data('C');  
  151. LCD_write_data('H');  
  152. LCD_write_data('1');  
  153. LCD_write_data(':');  
  154. LCD_write_cmd(0x85);
  155. LCD_write_data('.');
  156. LCD_write_cmd(0x87);
  157. LCD_write_data('V');
  158. while(1)  
  159. {   
  160. LCD_write_cmd(0x84);                 //將要顯示的字符顯示在此地址處
  161. LCD_write_data(data1_convert(dat));  //顯示電壓的整數部分
  162. LCD_write_cmd(0x86);                //將要顯示的字符顯示在此地址處
  163. LCD_write_data(data0_convert(dat));  //顯示電壓的小數部分
  164. }
  165. }
  166. #endif
復制代碼


回復

使用道具 舉報

ID:276150 發表于 2018-1-17 11:53 | 顯示全部樓層
主要是main函數怎么寫
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美中文在线 | 最新黄色在线观看 | 国产精品久久久久久妇女6080 | 美女天天操 | 欧美爱爱视频网站 | 国产精品自拍视频 | 亚洲男女激情 | 亚洲国产成人精品女人久久久野战 | 精品少妇一区二区三区日产乱码 | 美女久久视频 | 一区二区三区四区电影 | 久久久久国产一级毛片高清网站 | 亚洲一区二区av | 亚洲成人av一区二区 | 天天射美女 | 亚洲97| 亚洲三级视频 | 亚洲综合色视频在线观看 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 黄色一级大片视频 | 天堂亚洲网 | 中文字幕在线一区二区三区 | 高清久久| 日韩av成人在线观看 | 亚洲a视频| 伦理午夜电影免费观看 | 特黄视频 | 九九av | 久久综合99| 91pao对白在线播放 | 五月激情久久 | 一区免费| 精品国产精品国产偷麻豆 | 亚洲午夜在线 | 久久久久久久久99 | 一区视频 | 国产高清一区二区三区 | 日本在线视 | 久久久女女女女999久久 | 99精品视频免费观看 | 国产一区二区三区 |