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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我做的單片機步進電機和lcd顯示溫度傳感器和AD值

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:419409 發(fā)表于 2018-11-2 16:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LCD1602液晶+步進電機+18B20+矩陣鍵盤+電位計AD值。考核內(nèi)容,矩陣鍵盤(1,1)步進電機啟動(1.2)步進電機加速(1.3)步進電機二倍速(1.4)步進電機停止。
(2.1)控制LCD1602(2.2)LCD1602液晶循環(huán)顯示兩個傳感器采集的數(shù)據(jù)。

單片機源程序如下:
  1. /*******************************************************************************
  2. *                 
  3. *                                        普中科技
  4. --------------------------------------------------------------------------------
  5. * 實 驗 名                 : 18B20溫度顯示試驗
  6. * 實驗說明       : LCD1602顯示溫度值。
  7. * 連接方式       : 見連接圖
  8. * 注    意                 :
  9. *******************************************************************************/

  10. #include<reg51.h>
  11. #include"lcd.h"
  12. #include"temp.h"
  13. #include"XPT2046.h"
  14. void LcdDisplay(int);
  15. void datapros();
  16. typedef unsigned int u16;          
  17. typedef unsigned char u8;



  18. sbit MOTOA = P1^0;
  19. sbit MOTOB = P1^1;
  20. sbit MOTOC = P1^2;
  21. sbit MOTOD = P1^3;

  22. #define SPEED1 200
  23. #define SPEED2 250
  24. #define SPEED3 400
  25. #define GPIO_KEY P3
  26. #define GPIO_DIG P0       

  27. u8 KeyValue;
  28. void delay(u16 i)
  29. {
  30.         while(i--);       
  31. }



  32. void KeyDown(void)
  33. {
  34.         char a=0;
  35.         GPIO_KEY=0x0f;
  36.         if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
  37.         {
  38.                 delay(1000);//延時10ms進行消抖
  39.                 if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下
  40.                 {       
  41.                         //測試列
  42.                         GPIO_KEY=0X0F;
  43.                         switch(GPIO_KEY)
  44.                         {
  45.                                 case(0X07):        KeyValue=0;break;
  46.                                 case(0X0b):        KeyValue=1;break;
  47.                                 case(0X0d): KeyValue=2;break;
  48.                                 case(0X0e):        KeyValue=3;break;
  49.                         }
  50.                         //測試行
  51.                         GPIO_KEY=0XF0;
  52.                         switch(GPIO_KEY)
  53.                         {
  54.                                 case(0X70):        KeyValue=KeyValue;break;
  55.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  56.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  57.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  58.                         }
  59.                         while((a<50)&&(GPIO_KEY!=0xf0))         //檢測按鍵松手檢測
  60.                         {
  61.                                 delay(1000);
  62.                                 a++;
  63.                         }
  64.                 }
  65.         }
  66. }



  67. /*******************************************************************************
  68. * 函數(shù)名         : main
  69. * 函數(shù)功能                   : 主函數(shù)
  70. * 輸入           : 無
  71. * 輸出                  : 無
  72. *******************************************************************************/

  73. void main()
  74. {
  75.         LcdInit();        //初始化LCD1602
  76.         P1=0X00;


  77.            while(1)
  78.         {       
  79.                 KeyDown();                   //按鍵判斷函數(shù)
  80.                  while( KeyValue==0 )
  81.                 {       
  82.                   MOTOA = 1;
  83.                  MOTOB = 0;
  84.                  MOTOC = 1;
  85.                  MOTOD = 1;
  86.                  delay(SPEED1);

  87.                  MOTOA = 1;
  88.                    MOTOB = 1;
  89.                  MOTOC = 1;
  90.                  MOTOD = 0;
  91.                  delay(SPEED1);

  92.                  MOTOA = 0;
  93.                  MOTOB = 1;
  94.                  MOTOC = 1;
  95.                  MOTOD = 1;
  96.                  delay(SPEED1);

  97.                  MOTOA = 1;
  98.                  MOTOB = 1;
  99.                  MOTOC = 0;
  100.                  MOTOD = 1;
  101.                  delay(SPEED1);
  102.                           break;
  103.                 }
  104.                 while( KeyValue==1 )
  105.                 {       
  106.                  MOTOA = 1;
  107.                     MOTOB = 0;
  108.                  MOTOC = 1;
  109.                  MOTOD = 1;
  110.                  delay(SPEED2);

  111.                  MOTOA = 1;
  112.                  MOTOB = 1;
  113.                  MOTOC = 1;
  114.                  MOTOD = 0;
  115.                  delay(SPEED2);

  116.                  MOTOA = 0;
  117.                  MOTOB = 1;
  118.                  MOTOC = 1;
  119.                  MOTOD = 1;
  120.                  delay(SPEED2);

  121.                  MOTOA = 1;
  122.                  MOTOB = 1;
  123.                  MOTOC = 0;
  124.                  MOTOD = 1;
  125.                  delay(SPEED2);
  126.                            break;
  127.                 }
  128.                 while( KeyValue==2 )
  129.                 {       
  130.                  MOTOA = 1;
  131.                  MOTOB = 0;
  132.                  MOTOC = 1;
  133.                  MOTOD = 1;
  134.                  delay(SPEED3);

  135.                 MOTOA = 1;
  136.                 MOTOB = 1;
  137.                 MOTOC = 1;
  138.                 MOTOD = 0;
  139.                 delay(SPEED3);

  140.                 MOTOA = 0;
  141.                 MOTOB = 1;
  142.                 MOTOC = 1;
  143.                 MOTOD = 1;
  144.                 delay(SPEED3);

  145.                 MOTOA = 1;
  146.                 MOTOB = 1;
  147.                 MOTOC = 0;
  148.                 MOTOD = 1;
  149.                 delay(SPEED3);
  150.                           break;
  151.                  }
  152.                 while(KeyValue==3)
  153.                 {
  154.                  P1=0X00;
  155.                           break;
  156.                 }
  157.                 while(KeyValue==4)
  158.                 {
  159.                  LcdWriteCom(0x88);        //寫地址 80表示初始地址
  160.              LcdWriteData('C');
  161.                  LcdDisplay(Ds18b20ReadTemp());
  162.                  Delay1ms(1000);
  163.                
  164.                       break;
  165.                 }
  166.                 while(KeyValue==5)
  167.                 {
  168.                
  169.                   P1=0X00;
  170.                  
  171.                  
  172.                   datapros();
  173.                
  174.                       break;
  175.                 }
  176.        
  177.         }               
  178. }

  179. /*******************************************************************************
  180. * 函數(shù)名         : LcdDisplay()
  181. * 函數(shù)功能                   : LCD顯示讀取到的溫度
  182. * 輸入           : v
  183. * 輸出                  : 無
  184. *******************************************************************************/

  185. void LcdDisplay(int temp)          //lcd顯示溫度
  186. {
  187.    
  188.           unsigned char datas[] = {0, 0, 0, 0, 0}; //定義數(shù)組
  189.         float tp;  
  190.         if(temp< 0)                                //當溫度值為負數(shù)
  191.           {
  192.                   LcdWriteCom(0x80);                //寫地址 80表示初始地址
  193.             LcdWriteData('-');                  //顯示負
  194.                 //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
  195.                 temp=temp-1;
  196.                 temp=~temp;
  197.                 tp=temp;
  198.                 temp=tp*0.0625*100+0.5;       
  199.                 //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點
  200.                 //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  201.                 //算由?.5,還是在小數(shù)點后面。

  202.           }
  203.         else
  204.           {                       
  205.                   LcdWriteCom(0x80);                //寫地址 80表示初始地址
  206.             LcdWriteData('+');                 //顯示正
  207.                 tp=temp;//因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量
  208.                 //如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身
  209.                 temp=tp*0.0625*100+0.5;       
  210.                 //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點
  211.                 //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  212.                 //算加上0.5,還是在小數(shù)點后面。
  213.         }
  214.         datas[0] = temp / 10000;
  215.         datas[1] = temp % 10000 / 1000;
  216.         datas[2] = temp % 1000 / 100;
  217.         datas[3] = temp % 100 / 10;
  218.         datas[4] = temp % 10;

  219.         LcdWriteCom(0x82);                  //寫地址 80表示初始地址
  220.         LcdWriteData('0'+datas[0]); //百位

  221.        
  222.         LcdWriteCom(0x83);                 //寫地址 80表示初始地址
  223.         LcdWriteData('0'+datas[1]); //十位

  224.         LcdWriteCom(0x84);                //寫地址 80表示初始地址
  225.         LcdWriteData('0'+datas[2]); //個位

  226.         LcdWriteCom(0x85);                //寫地址 80表示初始地址
  227.         LcdWriteData('.');                 //顯示 ‘.’

  228.         LcdWriteCom(0x86);                 //寫地址 80表示初始地址
  229.         LcdWriteData('0'+datas[3]); //顯示小數(shù)點  

  230.         LcdWriteCom(0x87);                 //寫地址 80表示初始地址
  231.         LcdWriteData('0'+datas[4]); //顯示小數(shù)點  
  232. }


  233. /*******************************************************************************
  234. * 函數(shù)名         :datapros()
  235. * 函數(shù)功能                 :數(shù)據(jù)處理函數(shù)
  236. * 輸入           : 無
  237. * 輸出                  : 無
  238. *******************************************************************************/
  239. void datapros()
  240. {

  241.         unsigned char datas2[] = {0, 0, 0, 0, }; //定義數(shù)組
  242.         u16 temp;
  243.         static u8 i;
  244.         if(i==50)
  245.         {
  246.                 i=0;
  247.                 temp = Read_AD_Data(0xE4);                //   AIN3 外部輸入
  248.         }
  249.         i++;
  250.         datas2[0] = temp / 1000;
  251.         datas2[1] = temp % 10000 / 100;
  252.         datas2[2] = temp % 1000 / 10;
  253.         datas2[3] = temp % 1000 % 100%10;
  254.        
  255.        
  256.         LcdWriteCom(0x82);                  //寫地址 80表示初始地址
  257.         LcdWriteData('0'+datas2[0]); //百位

  258.        
  259.         LcdWriteCom(0x83);                 //寫地址 80表示初始地址
  260.         LcdWriteData('0'+datas2[1]); //十位

  261.         LcdWriteCom(0x84);                //寫地址 80表示初始地址
  262.         LcdWriteData('0'+datas2[2]); //個位


  263.         LcdWriteCom(0x85);                 //寫地址 80表示初始地址
  264.         LcdWriteData('0'+datas2[3]); //顯示小數(shù)點  

  265.         LcdWriteCom(0x86);                 //寫地址 80表示初始地址
  266.         LcdWriteData('0'+datas2[4]); //顯示小數(shù)點         
  267. }
復(fù)制代碼

所有資料51hei提供下載:
LCD顯示AD和溫度傳感器.zip (62.81 KB, 下載次數(shù): 22)



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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-11-2 16:32 | 只看該作者
樓主能分享下原理圖嗎?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 男女视频在线看 | 成人欧美一区二区三区黑人孕妇 | 日日干日日射 | 亚洲欧美一区在线 | 国产精品jizz在线观看老狼 | 日日干干| 人人做人人澡人人爽欧美 | 超碰av在线 | 欧美一级欧美三级在线观看 | 日韩精品1区2区 | 一区二区av在线 | 欧美在线a | 福利视频一区二区三区 | 欧美色影院 | 伊人久久精品一区二区三区 | 中文字幕综合 | 中文字幕在线观看 | 日韩aⅴ视频 | 国产精品日韩 | 亚洲天堂久久新 | 91资源在线观看 | 日韩有码一区 | 国产欧美日韩久久久 | 日日干夜夜操 | 欧美中文字幕一区二区三区 | 亚洲一区导航 | 国产精品一区二区三区久久久 | 久久亚洲精品国产精品紫薇 | 91麻豆精品国产91久久久更新资源速度超快 | 精品国产一区二区三区久久影院 | 99精品网 | 色婷婷综合成人av | 不用播放器看的av | 久久在线免费 | 久久av.com| 一级毛片视频 | 在线一区视频 | 亚洲www啪成人一区二区 | 国产精品高清在线 | 亚洲网站在线播放 | 91免费电影 |