一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

TTP229觸摸模塊的51單片機(jī)驅(qū)動(dòng)程序

 用久智能 2020-05-20
 網(wǎng)購了一塊TTP229的觸摸模塊。模塊中實(shí)際使用的是8229BSF集成塊。本人用STC89C52搭建了測(cè)試電路。用12864液晶顯示。
顯示01-16,表示16個(gè)按鈕的對(duì)應(yīng)值。

制作出來的實(shí)物圖如下:
TTP229.jpgTTP229_1.jpg

單片機(jī)源程序如下:
  1. /*********************************************************************************

  2. * 【作    者】:

  3. * 【版    本】:

  4. * 【函數(shù)功能】: 利用單線制DS18B20溫度傳感器, 并在液晶12864上顯示

  5. * 【使用說明】: 觸摸板P1的第一和第三跳線短接

  6. **********************************************************************************/

  7. #include <reg52.h>

  8. #include <string.h>

  9. #include <math.h>

  10. #include <stdio.h>

  11. #include <intrins.h>

  12. #define uchar unsigned char

  13. #define uint  unsigned int

  14. // 液晶現(xiàn)實(shí)屬區(qū)區(qū)

  15. uchar code pic1[];

  16. uchar code pic2[];

  17. uchar code pic3[];

  18. /* 液晶控制接口 -----------------------------------------------*/

  19. sbit RS  = P0^7;

  20. sbit WRD = P0^6;

  21. sbit E   = P0^5;

  22. sbit PSB = P0^4;

  23. sbit RES = P0^3;

  24. sbit sign = P1^0;

  25. sbit sign1 = P1^1;

  26. // TTP229接口

  27. sbit SDA=P1^2;

  28. sbit SCL=P1^3;

  29. // 溫度傳感器接口

  30. sbit DQ=P3^7; //數(shù)據(jù)傳輸線接單片機(jī)的相應(yīng)的引腳

  31. /* 溫度測(cè)量用變量定義 -----------------------------------------------*/

  32. unsigned char tempL=0; //設(shè)全局變量

  33. unsigned char tempH=0;

  34. unsigned int sdate;//測(cè)量到的溫度的整數(shù)部分

  35. unsigned char xiaoshu1;//小數(shù)第一位

  36. unsigned char xiaoshu2;//小數(shù)第二位

  37. unsigned char xiaoshu;//兩位小數(shù)

  38. bit  fg=1;        //溫度正負(fù)標(biāo)志

  39. // 液晶處理函數(shù)

  40. void TransferData(char data1,bit DI);

  41. void display(void);

  42. void display_grapic(void);

  43. void delayms(uint n);

  44. void DisplayLine(uchar line1,uchar line2);

  45. void DisplayGraphic(uchar *adder);

  46. void delay(uint m);

  47. void lcd_mesg(uchar *adder1);

  48. void delay1ms(unsigned int t);

  49. // 18B20溫度傳感器函數(shù)

  50. void ReadTemperature(void);

  51. void Init_DS18B20(void);

  52. unsigned char ReadOneChar();

  53. void WriteOneChar(unsigned char dat);

  54. void Delay10us(unsigned int t);

  55. void Initial_com(void);

  56. // 掃描TTP229電容觸摸鍵盤模塊

  57. unsigned int TTP229B(void);

  58. /********************************************************************

  59. * 名稱 : Convert(uchar In_Dat)

  60. * 功能 : 因?yàn)殡娐吩O(shè)計(jì)時(shí),P2.0--P2.7接法剛好了資料中的相反,所以設(shè)計(jì)該函數(shù)。

  61. * 輸入 : 1602資料上的值

  62. * 輸出 : 送到1602的值

  63. ***********************************************************************/

  64. unsigned char Convert(uchar In_Dat) {

  65.     uchar i, Out_Dat;

  66.     for(i=0; i<8; i++){

  67.                 Out_Dat=  In_Dat;

  68.     }

  69.     return Out_Dat;

  70. }

  71. void initinal(void)  {         //LCD字庫初始化程序

  72.         delay(40);             //大于40MS的延時(shí)程序

  73.         PSB=1;                 //設(shè)置為8BIT并口工作模式

  74.         delay(1);              //延時(shí)

  75.         RES=0;                 //復(fù)位

  76.         delay(1);              //延時(shí)

  77.         RES=1;                 //復(fù)位置高

  78.         delay(10);

  79.         TransferData(0x30,0);  //Extended Function Set :8BIT設(shè)置,RE=0: basic instruction set, G=0 :graphic display OFF

  80.         delay(100);            //大于100uS的延時(shí)程序

  81.         TransferData(0x30,0);  //Function Set

  82.         delay(37);             ////大于37uS的延時(shí)程序

  83.         TransferData(0x08,0);  //Display on Control

  84.         delay(100);            //大于100uS的延時(shí)程序

  85.         TransferData(0x10,0);  //Cursor Display Control光標(biāo)設(shè)置

  86.         delay(100);            //大于100uS的延時(shí)程序

  87.         TransferData(0x0C,0);  //Display Control,D=1,顯示開

  88.         delay(100);            //大于100uS的延時(shí)程序

  89.         TransferData(0x01,0);  //Display Clear

  90.         delay(10);             //大于10mS的延時(shí)程序

  91.         TransferData(0x06,0);  //Enry Mode Set,光標(biāo)從右向左加1位移動(dòng)

  92.         delay(100);            //大于100uS的延時(shí)程序

  93. }

  94. /********************************************************************

  95. * 名稱 : initina2()

  96. * 功能 : 主函數(shù)

  97. * 輸入 : 無

  98. * 輸出 : 無

  99. ***********************************************************************/

  100. void     initina2(void)           //LCD顯示圖片(擴(kuò)展)初始化程序

  101.           {

  102.            delay(40);             //大于40MS的延時(shí)程序

  103.            PSB=1;                 //設(shè)置為8BIT并口工作模式

  104.            delay(1);              //延時(shí)

  105.            RES=0;                 //復(fù)位

  106.            delay(1);              //延時(shí)

  107.            RES=1;                 //復(fù)位置高

  108.            delay(10);

  109.            TransferData(0x36,0);  //Extended Function Set RE=1: extended instruction

  110.            delay(100);            //大于100uS的延時(shí)程序

  111.            TransferData(0x36,0);  //Extended Function Set:RE=1: extended instruction set

  112.            delay(37);             ////大于37uS的延時(shí)程序

  113.            TransferData(0x3E,0);  //EXFUNCTION(DL=8BITS,RE=1,G=1)

  114.            delay(100);            //大于100uS的延時(shí)程序

  115.            TransferData(0x01,0);  //CLEAR SCREEN

  116.            delay(100);            //大于100uS的延時(shí)程序

  117.           }

  118. /********************************************************************

  119. * 名稱 : Main()

  120. * 功能 : 主函數(shù)

  121. * 輸入 : 無

  122. * 輸出 : 無

  123. ***********************************************************************/

  124. void    main(void) {

  125.     uchar init18B20[]={

  126.                 "溫度傳感器18B20 "  

  127.                 "初始化中......  "

  128.                 "                "

  129.                 "                "

  130.         };

  131.         uchar curtemp[]={

  132.                 "當(dāng)前溫度:      "  

  133.                 "                "

  134.                 "                "

  135.                 "                "

  136.         };

  137.         uchar IC_DAT2[]={

  138.             "白日依山盡,    "                        //0x80

  139.             "欲窮千里目,    "                        //0x90

  140.             "黃河入海流。    "                        //0x88

  141.             "更上一層樓。    "                        //0x98

  142.         };

  143.         unsigned int key=0;

  144.         // 初始化串口

  145.         Initial_com();

  146.         initinal();                    //調(diào)用LCD字庫初始化程序

  147.         delay(100);            //大于100uS的延時(shí)程序

  148.         lcd_mesg(IC_DAT2);     //顯示中文漢字2

  149.         delayms(80);

  150.         sign = 0;

  151.     // 顯示溫度傳感器18B20初始化中

  152.         initinal();                    //調(diào)用LCD字庫初始化程序

  153.         delay(100);            //大于100uS的延時(shí)程序

  154.         lcd_mesg(init18B20);      //顯示中文漢字1

  155.         delay(240);

  156.         delay(240);

  157.         Init_DS18B20(); //初始化

  158.         sign = 1;

  159.         delayms(80);

  160.         SDA=1;

  161.     SCL=1;

  162.         while(1) {

  163.                 sign1 = 0;

  164.                 // 初始化溫度傳感器并取得當(dāng)前溫度

  165.                 ReadTemperature();

  166.                 sign1=1;

  167.                 SBUF=sdate;

  168.                 delayms(20);

  169.                 SBUF=xiaoshu;

  170.                 // 轉(zhuǎn)換溫度數(shù)據(jù)為字符串

  171.                 // 整數(shù)部分

  172.                 curtemp[10]=48+sdate/10;

  173.                 curtemp[11]=48+sdate%10;

  174.                 // 小數(shù)點(diǎn)

  175.                 curtemp[12]='.';

  176.                 // 小數(shù)部分

  177.                 //curtemp[13]=48+xiaoshu/10;

  178.                 curtemp[13]=48+xiaoshu1;

  179.                 curtemp[14]=48+xiaoshu2;

  180.                 delayms(20);

  181.                 // 讀鍵盤,顯示按鈕標(biāo)號(hào)

  182.                 key = TTP229B();

  183.                 curtemp[16]='K';

  184.                 curtemp[17]='e';

  185.                 curtemp[18]='y';

  186.                 curtemp[19]=':';

  187.                 curtemp[20]=key/10 + 48;

  188.                 curtemp[21]=key%10 + 48;

  189.              lcd_mesg(curtemp);     //顯示按鈕編號(hào)

  190.         }

  191. }

  192. /********************************************************************

  193. * 名稱 : lcd_mesg()

  194. * 功能 : 輸出信息到LCD

  195. * 輸入 : adder1 字符串信息

  196. * 輸出 : 無

  197. ***********************************************************************/

  198. void lcd_mesg(unsigned char *adder1) {

  199.         unsigned char i;

  200.     TransferData(0x80,0);  //Set Graphic Display RAM Address

  201.     delay(100);

  202.         for(i=0;i<32;i++) {

  203.                 TransferData(*adder1,1);

  204.                 adder1++;

  205.         }

  206.     TransferData(0x90,0);  //Set Graphic Display RAM Address

  207.     delay(100);

  208.         for(i=32;i<64;i++) {

  209.                 TransferData(*adder1,1);

  210.                 adder1++;

  211.         }

  212. }

  213. /********************************************************************

  214. * 名稱 : TTP229B()

  215. * 功能 : 掃描TTP229電容鍵盤(16按鍵)函數(shù)

  216. * 觸摸結(jié)果直接輸出只有8個(gè),平時(shí)輸出低電平,觸摸按鍵鍵后,對(duì)應(yīng)輸出腳為高電平

  217. * 同時(shí)觸摸按鍵,只有第一個(gè)生效

  218. * 輸入 : 無

  219. * 輸出 : 按鍵編號(hào)

  220. ***********************************************************************/

  221. unsigned int TTP229B(void) {

  222.         uchar key=0;

  223.         unsigned char i;

  224.     unsigned int temp=0x0000;

  225.         SDA=0;

  226.     delay(100);

  227.     SDA=1;

  228.         delay(20);

  229.            for(i=0;i<16;i++) {

  230.                   SCL=0;

  231.                 _nop_();;

  232.                 SCL=1;

  233.         _nop_();;

  234.                 if(SDA==0) {

  235.                         temp|=(1<<i);

  236.                 }

  237.         }

  238.            for (i=0;i<16;i++) {

  239.            if ((temp & (1<<i)) > 0) {

  240.                       key=i+1;

  241.            }

  242.         }

  243.         delayms(32);

  244.            return key;

  245. }

  246. /********************************************************************

  247. * 名稱 : TransferData()

  248. * 功能 : 主函數(shù)

  249. * 輸入 : 無

  250. * 輸出 : 無

  251. ***********************************************************************/

  252. void TransferData(char data1,bit DI)  { //傳送數(shù)據(jù)或者命令,當(dāng)DI=0是,傳送命令,當(dāng)DI=1,傳送數(shù)據(jù).

  253.         WRD=0;

  254.         RS=DI;

  255.         delay(1);

  256.         P2=Convert(data1);

  257.         E=1;

  258.         delay(1);

  259.         E=0;

  260. }

  261. /********************************************************************

  262. * 名稱 : delayms()

  263. * 功能 : 主函數(shù)

  264. * 輸入 : 無

  265. * 輸出 : 無

  266. ***********************************************************************/

  267. void delayms(unsigned int n) {            //延時(shí)10×n毫秒程序

  268.         unsigned int i,j;

  269.         for(i=0;i<n;i++)

  270.         for(j=0;j<2000;j++);

  271. }

  272. ///********************************************************************

  273. //* 名稱 : Main()

  274. //* 功能 : 主函數(shù)

  275. //* 輸入 : 無

  276. //* 輸出 : 無

  277. //***********************************************************************/

  278. //void delay(unsigned int m) {            //延時(shí)程序

  279. //        unsigned int i,j;

  280. //        for(i=0;i<m;i++)

  281. //        for(j=0;j<10;j++);

  282. //}

  283. /********************************************************************

  284. * 名稱 : DisplayGraphic()

  285. * 功能 : 主函數(shù)

  286. * 輸入 : 無

  287. * 輸出 : 無

  288. ***********************************************************************/

  289. void DisplayGraphic(unsigned char *adder) {

  290.         int i,j;

  291.         //*******顯示上半屏內(nèi)容設(shè)置

  292.            for(i=0;i<32;i++)  {            //

  293.                 TransferData((0x80 + i),0); //SET  垂直地址 VERTICAL ADD

  294.                 TransferData(0x80,0);       //SET  水平地址 HORIZONTAL ADD

  295.                 for(j=0;j<16;j++)

  296.                 {

  297.                  TransferData(*adder,1);

  298.                  adder++;

  299.                 }

  300.         }           

  301.         //*******顯示下半屏內(nèi)容設(shè)置

  302.            for(i=0;i<32;i++)  {

  303.                 TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD

  304.                 TransferData(0x88,0);       //SET 水平地址 HORIZONTAL ADD

  305.                 for(j=0;j<16;j++) {

  306.                 TransferData(*adder,1);

  307.                 adder++;

  308.                }

  309.     }

  310. }

  311. unsigned char code pic2[]=

  312. {

  313. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  314. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  315. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,

  316. 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,

  317. 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,

  318. 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,

  319. 0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,

  320. 0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,

  321. 0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,

  322. 0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,

  323. 0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,

  324. 0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,

  325. 0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x01,0xE6,0x00,0x00,0x00,0x00,0x00,

  326. 0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x07,0x82,0x00,0x00,0x00,0x00,0x00,

  327. 0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x1E,0x02,0x00,0x00,0x00,0x00,0x00,

  328. 0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x78,0x03,0x00,0x00,0x00,0x00,0x00,

  329. 0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x01,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,

  330. 0x00,0x00,0x00,0x01,0x78,0x00,0x00,0x00,0x07,0x80,0x01,0x00,0x00,0x00,0x00,0x00,

  331. 0x00,0x00,0x00,0x03,0x1E,0x00,0x00,0x00,0x1E,0x00,0x07,0x00,0x00,0x00,0x00,0x00,

  332. 0x00,0x00,0x00,0x03,0x07,0x80,0x00,0x00,0x78,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,

  333. 0x00,0x00,0x00,0x02,0x01,0xE0,0x00,0x01,0xE0,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,

  334. 0x00,0x00,0x00,0x06,0x00,0x78,0x1F,0x07,0x80,0x01,0xF1,0x80,0x00,0x00,0x00,0x00,

  335. 0x00,0x00,0x00,0x0E,0x00,0x1E,0x3F,0x9E,0x00,0x03,0xF9,0x80,0x00,0x00,0x00,0x00,

  336. 0x00,0x00,0x00,0x0E,0x00,0x07,0xB3,0x78,0x00,0x0F,0xF9,0x80,0x00,0x00,0x00,0x00,

  337. 0x00,0x00,0x00,0x0F,0x80,0x01,0xFF,0xE0,0x00,0x79,0x98,0x80,0x00,0x00,0x00,0x00,

  338. 0x00,0x00,0x00,0x0F,0xE0,0x00,0x7F,0x80,0x00,0xE0,0xD8,0x80,0x00,0x00,0x00,0x00,

  339. 0x00,0x00,0x00,0x0F,0xF8,0x00,0x0C,0x00,0x07,0xE0,0xF8,0x80,0x00,0x00,0x00,0x00,

  340. 0x00,0x00,0x00,0x0E,0x7E,0x00,0x0C,0x00,0x1F,0xF0,0xF8,0x80,0x00,0x00,0x00,0x00,

  341. 0x00,0x00,0x00,0x0E,0x1F,0x80,0x0C,0x00,0x7E,0x70,0xDC,0x80,0x00,0x00,0x00,0x00,

  342. 0x00,0x00,0x00,0x0F,0x07,0xE0,0x0C,0x01,0xE3,0x70,0x5C,0xC0,0x00,0x00,0x00,0x00,

  343. 0x00,0x00,0x00,0x0F,0x81,0xF8,0x0C,0x07,0x83,0x70,0x5F,0xC0,0x00,0x00,0x00,0x00,

  344. 0x00,0x00,0x00,0x0D,0xE0,0x7E,0x0C,0x1F,0xC1,0xF0,0x5F,0xC0,0x00,0x00,0x00,0x00,

  345. 0x00,0x00,0x00,0x0F,0x78,0x3F,0x8C,0x7F,0xC1,0xB8,0x47,0xC0,0x00,0x00,0x00,0x00,

  346. 0x00,0x00,0x00,0x0F,0x1E,0x0F,0xED,0xEC,0xE1,0xB8,0xC7,0xC0,0x00,0x00,0x00,0x00,

  347. 0x00,0x00,0x00,0x1F,0x07,0x83,0xFF,0xC6,0xE1,0xB9,0xC7,0xC0,0x00,0x00,0x00,0x00,

  348. 0x00,0x00,0x00,0x1F,0x07,0xE0,0xFF,0xE7,0xE1,0xBF,0x07,0xC0,0x00,0x00,0x00,0x00,

  349. 0x00,0x00,0x00,0x1F,0x07,0xF8,0x3F,0xE7,0xE1,0xBF,0x07,0xC0,0x00,0x00,0x00,0x00,

  350. 0x00,0x00,0x00,0x1F,0x07,0x9E,0x0C,0xE6,0xE1,0x8F,0x07,0xC0,0x00,0x00,0x00,0x00,

  351. 0x00,0x00,0x00,0x1F,0x07,0x87,0x8C,0xE6,0xE3,0x8F,0x83,0xC0,0x00,0x00,0x00,0x00,

  352. 0x00,0x00,0x00,0x1F,0x0F,0x81,0xED,0xE6,0xE7,0x0F,0x83,0xC0,0x00,0x00,0x00,0x00,

  353. 0x00,0x00,0x00,0x1F,0x07,0x00,0x7F,0xE6,0xFE,0x0F,0x83,0x40,0x00,0x00,0x00,0x00,

  354. 0x00,0x00,0x00,0x1F,0x00,0x00,0x1E,0x76,0xFE,0x0F,0x83,0x40,0x00,0x00,0x00,0x00,

  355. 0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x72,0x1E,0x0F,0x83,0x40,0x00,0x00,0x00,0x00,

  356. 0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x7E,0x1A,0x0F,0x83,0x40,0x00,0x00,0x00,0x00,

  357. 0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x7C,0x1A,0x0F,0x83,0xC0,0x00,0x00,0x00,0x00,

  358. 0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x78,0x1A,0x0F,0x83,0xC0,0x00,0x00,0x00,0x00,

  359. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x1A,0x07,0x83,0xC0,0x00,0x00,0x00,0x00,

  360. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1E,0x07,0x80,0x00,0x00,0x00,0x00,0x00,

  361. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x07,0x80,0x00,0x00,0x00,0x00,0x00,

  362. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x07,0x80,0x00,0x00,0x00,0x00,0x00,

  363. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x07,0x80,0x00,0x00,0x00,0x00,0x00,

  364. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,

  365. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x00,0x00,0x00,0x00,0x08,0x00,0x00,

  366. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x00,0x00,0x00,0x00,0x10,0x00,0x40,

  367. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1F,0x00,0x00,0x00,0x00,0xFF,0x08,0x20,

  368. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1F,0x00,0x00,0x00,0x00,0x28,0x05,0xFC,

  369. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x0C,0x00,0x00,0x00,0x00,0x48,0x00,0x40,

  370. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0xFF,0x08,0x88,

  371. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x08,0x05,0xFC,

  372. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x4A,0x00,0xA8,

  373. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x89,0x04,0xA8,

  374. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x08,0x88,0xA8,

  375. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x10,0xAA,

  376. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x2E,

  377. };

  378. /*

  379. ********************************************************************************

  380. ** 函數(shù)名稱 : delay(unsigned char i)

  381. ** 函數(shù)功能 : 延時(shí)函數(shù)                這個(gè)延時(shí)程序的具體延時(shí)時(shí)間是time=i*8+10,適用于小于2ms的延時(shí)

  382. ********************************************************************************

  383. */

  384. void delay(unsigned int i)

  385. {

  386.          while(i--);

  387. }

  388. /*

  389. ********************************************************************************

  390. ** 函數(shù)名稱 :  delay1ms(unsigned char i)

  391. ** 函數(shù)功能 : 延時(shí)函數(shù)        

  392. ********************************************************************************

  393. */

  394. void delay1ms(unsigned int t)

  395. {

  396. //for(i=124;i>0;i--);  //延時(shí)124*8+10=1002us

  397.      unsigned char a,b,c;

  398.         for(t;t>0;t--)

  399.             for(c=1;c>0;c--)

  400.                 for(b=142;b>0;b--)

  401.                     for(a=2;a>0;a--);

  402. }

  403. /*

  404. ********************************************************************************

  405. ** 函數(shù)名稱 : Init_DS18B20(void)

  406. ** 函數(shù)功能 : 初始化

  407. ********************************************************************************

  408. */

  409. void Init_DS18B20(void)

  410. {

  411. unsigned char x=0;

  412. DQ=1; //DQ先置高

  413. Delay10us(60);//最小480,最大960

  414. DQ=0; //發(fā)送復(fù)位脈沖

  415. Delay10us(60);//最小480,最大960

  416. DQ=1; //拉高數(shù)據(jù)線

  417. Delay10us(6);//15-60us

  418. // x=DQ; //用X的值來判斷初始化有沒有成功,18B20存在的話X=0,否則X=1

  419. //delay(20);

  420. while(DQ==0);

  421. DQ=1;//讓傳感器釋放總線,避免影響下一步

  422. }

  423. /*

  424. ********************************************************************************

  425. ** 函數(shù)名稱 :  ReadOneChar()

  426. ** 函數(shù)功能 : 讀一個(gè)字節(jié)

  427. ********************************************************************************

  428. */

  429. unsigned char  ReadOneChar()  //主機(jī)數(shù)據(jù)線先從高拉至低電平1us以上,再使數(shù)據(jù)線升為高電平,從而產(chǎn)生讀信號(hào)

  430. {

  431.         unsigned char dat=0;

  432.         unsigned char mask,fmask;

  433.         for(mask=0x01;mask!=0;mask<<=1)//一個(gè)周期需要至少60us,但采樣要在15us內(nèi)完成

  434.         {

  435.                 DQ=0;

  436.                 _nop_();

  437.                 DQ=1;

  438.                 _nop_();

  439.                 _nop_();

  440.                 _nop_();

  441.                 _nop_();

  442.                 _nop_();

  443.                 _nop_();

  444.                 if(DQ==0)//讀0

  445.                 {

  446.                         fmask=~mask;

  447.                         dat=dat&fmask;

  448.                 }

  449.                 else

  450.                 {

  451.                         dat|=mask;

  452.                 }

  453.                 Delay10us(5);

  454.                 DQ=1;

  455.         }

  456.         return dat;

  457. }

  458. /*

  459. ********************************************************************************

  460. ** 函數(shù)名稱 : WriteOneChar(unsigned char dat)

  461. ** 函數(shù)功能 : 寫一個(gè)字節(jié)

  462. //一個(gè)寫周期為60-120us,主機(jī)在15--45us內(nèi)對(duì)信號(hào)采樣

  463. ********************************************************************************

  464. */

  465. void WriteOneChar(unsigned char dat)

  466. {

  467.   unsigned char i=0; //數(shù)據(jù)線從高電平拉至低電平,產(chǎn)生寫起始信號(hào)。15us之內(nèi)將所需寫的位送到數(shù)據(jù)線上,

  468.   for(i=8;i>0;i--) //在15~60us之間對(duì)數(shù)據(jù)線進(jìn)行采樣,如果是高電平就寫1,低寫0發(fā)生。

  469.   {

  470.    DQ=0; //在開始另一個(gè)寫周期前必須有1us以上的高電平恢復(fù)期。

  471.    DQ=dat&0x01;

  472.    Delay10us(6);//15-60us采樣

  473.    DQ=1;

  474.    dat>>=1;

  475.   }

  476.   delay(4);

  477. }

  478. ……………………

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美日韩综合在线精品| 中文字幕中文字幕一区二区| 国产伦精品一一区二区三区高清版| 国产精品夜色一区二区三区不卡 | 欧美人妻一区二区三区| 国产精品伦一区二区三区在线| 99亚洲综合精品成人网色播| 欧美国产日本高清在线| 一本久道久久综合中文字幕| 亚洲第一香蕉视频在线| 亚洲精品福利入口在线| 欧美日韩精品久久亚洲区熟妇人| 我的性感妹妹在线观看| 久久一区内射污污内射亚洲| 真实偷拍一区二区免费视频| 日韩成人h视频在线观看| 又黄又硬又爽又色的视频| 日本不卡在线视频你懂的 | 福利视频一区二区三区| 激情亚洲一区国产精品久久| 免费观看一级欧美大片| 日韩精品第一区二区三区| 免费福利午夜在线观看| 久久国内午夜福利直播| 精产国品一二三区麻豆| 国产成人亚洲精品青草天美| 不卡在线播放一区二区三区| 国产又粗又猛又爽色噜噜| 午夜亚洲精品理论片在线观看 | 日韩日韩日韩日韩在线| 欧美大胆女人的大胆人体| 国产av一二三区在线观看| 亚洲伦片免费偷拍一区| 91久久精品国产一区蜜臀| 男人大臿蕉香蕉大视频| 老富婆找帅哥按摩抠逼视频| 亚洲一二三四区免费视频| 美女黄色三级深夜福利| 久久碰国产一区二区三区| 91亚洲国产成人久久| 九九热精品视频在线观看|