欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機測速與1602顯示程序與電路 [打印本頁]

作者: 楊柱豪    時間: 2016-12-23 23:08
標題: 單片機測速與1602顯示程序與電路
STC12C單片機控制
光傳感器測速
PWM控制直流電機
下載:
程序 15:28.rar (109.18 KB, 下載次數: 148)


部分代碼預覽:
  1. #include"mytype.h"  //包含總合的頭文件

  2. #define DATA P2    //定義P0口為數據端

  3. //定義按鍵I/O口
  4. sbit key0=P0^6;                //正反轉、停止模式切換按鍵
  5. sbit key1=P0^7;                //加速按鍵
  6. sbit key2=P0^2;       
  7. sbit key3=P0^1;        //減速按鍵
  8. //sbit PWM=P0^0;
  9. //****************
  10. uchar   table2[16]="     _DGUT_     ";//第1行液晶顯示
  11. uchar  table1[16]= "000  Chen ZiXing";//第2行液晶顯示
  12. uchar  number_table[10]="0123456789";
  13. sbit lcden=P3^2;//液晶使能端
  14. sbit lcdrs=P3^5;//液晶讀寫控制端
  15. sbit wela=P3^3;
  16. //uchar number;
  17. uchar ge=0,shi=0,bai=0;
  18. //****************
  19. //定義全局變量flag=0,
  20. uchar speed=0,speed1=0;  //正反轉的標志位,0停止,1正轉,2反轉
  21. uint  num;   //定時器1的計數變量
  22. int quan;

  23. void delay(uint z)//延時函數
  24. {
  25.         uint x,y;
  26.         for(x=z;x>0;x--)
  27.                 for(y=310;y>0;y--);
  28. }
  29. void write_com(uchar com)//液晶寫地址函數
  30. {
  31.         lcdrs=0;
  32.         P2=com;
  33.         delay(5);
  34.         lcden=1;
  35.         delay(5);
  36.         lcden=0;
  37. }
  38. void write_data(uchar date)//液晶寫數據函數
  39. {
  40.         lcdrs=1;
  41.         P2=date;
  42.         delay(5);
  43.         lcden=1;
  44.         delay(5);
  45.         lcden=0;
  46. }
  47. void init()//液晶初始化函數
  48. {

  49.         wela=0;
  50.         lcden=0;
  51.         write_com(0x38);
  52.         write_com(0x0c);
  53.         write_com(0x06);
  54.         write_com(0x01);
  55. }
  56. void Lcd_display()//液晶顯示函數,主要是刷新轉速專用
  57. {
  58.         uint i;
  59.         table1[0]=number_table[bai];
  60.         table1[1]=number_table[shi];
  61.         table1[2]=number_table[ge];

  62.         write_com(0x80+0x40);
  63.         for(i=0;i<3;i++)
  64.         {
  65.                  write_data(table1[i]);
  66.                 delay(1);
  67.         }
  68. }
  69. void main()
  70. {        
  71.        
  72.         uchar number;
  73.         time_init();    //定時器初始化
  74.         PWM_Init();     //PWM初始化       
  75.         UART1_Init(9600);//串口初始化
  76.         DATA=0x00;      //數據端初始化為0
  77.         init();

  78.         write_com(0x80);
  79.         for(number=0;number<16;number++)
  80.         {
  81.                 write_data(table2[number]);
  82.                 delay(10);
  83.          }
  84.          write_com(0x80+0x40);
  85.          for(number=0;number<16;number++)
  86.          {
  87.                  write_data(table1[number]);
  88.                 delay(10);
  89.         }
  90.        
  91.         PWM_SET(46,0);//進去先讓電機速度為零
  92.        
  93.         while(1)
  94.          {
  95.                  keyscan();                                                        //按鍵掃描                   
  96.                  
  97.         /******用定時器1計算時間,每1秒算一次速度直接顯示*******/
  98.                  if(num>=20)//num 是T1計數器計數變量,numG=20時為1秒
  99.                  {
  100.                          TR0=0;TR1=0;//關定時器0/1中斷
  101.                          
  102.                                  num=0;//計數變量清零
  103.                          
  104.                                  ge=quan%10;quan=quan/10;
  105.                                  shi=quan%10;quan=quan/10;
  106.                                  bai=quan%10;

  107.                                  Lcd_display();        //LCD顯示控制                         
  108.                                  quan=0;//圈數記錄清零
  109.                                 TR1=1;TR0=1;        //開定時器0/1中斷
  110.                  }

  111.         /*******************************************************************/
  112.                           
  113.          }

  114. }

  115. void time_init()
  116. {
  117.   TMOD=0x15;               //設置定時器0為計數模式,定時器1為定時模式,都為工作方式1
  118.         TH0=(65536-1)/256;     
  119.         TL0=(65536-1)%256;
  120.         TH1=(65536-45872)/256;
  121.         TL1=(65536-45872)%256;       
  122.         ET0=1;                                        //開定時器0中斷
  123.         TR0=1;                                        //啟動定時器0
  124.         ET1=1;                                        //開定時器1中斷
  125.         TR1=1;                                        //啟動定時器1   
  126.         EA=1;                                 //開啟總中斷
  127. }

  128. //*************************************************************//
  129. //函數:keyscan()
  130. //功能:實現按鍵掃描、同時控制電機速度
  131. //
  132. //////********************************************************//
  133. void keyscan()
  134. {
  135.         if(key0==0||key1==0||key2==0)
  136.         {
  137.                 delay_ms(10);//延時去抖
  138.                 if(key0==0)
  139.                 {
  140.                         UART1_SendStr("a");
  141.                        
  142.                         if(speed<9)speed++;
  143.        else if(speed1<9){speed=0;speed1++;}
  144. //                        else speed=9;
  145.                         PWM_SET(speed1*10+speed,0);
  146.                         while(!key0);
  147.                 }
  148.                 else if(key1==0)
  149.                 {
  150.                                 UART1_SendStr("q");
  151.                                 if(speed>0)speed--;
  152.                           else if (speed1>0){speed1--;speed=9;}
  153.                         PWM_SET(speed1*10+speed,0);
  154.                                 while(!key1);
  155.      }
  156.                 else if(key2==0)
  157.                 {
  158.                                 UART1_SendStr("key2");
  159.                                 while(!key2);
  160.      }
  161.                           write_com(0x80);
  162.                  write_data(number_table[speed1]);        
  163.                  write_data(number_table[speed]);
  164.         }
  165. }

  166. void T0_time() interrupt 1 //外部中斷0函數,記錄紅外對管脈沖高個數,quan就是脈沖個數發,也是圈數
  167. {
  168.         TH0=(65536-1)/256;      //設置初值,每計數1就溢出
  169.         TL0=(65536-1)%256;
  170.         quan++;
  171. }

  172.                
  173. void T1_time() interrupt 3 //定時器1函數,定時計算一秒的時間,num==20的時候就是1秒
  174. {
  175.         TH1=(65536-45872)/256;        //設置初值,每計數15872就溢出
  176.         TL1=(65536-45872)%256;
  177.         num++;
  178. //if(num%speed==0)PWM=~PWM;        //累加溢出次數,40次為1秒,晶振為22.1184(20次為1秒,晶振為11.0592)
  179. }

  180. void delay_ms(int xms)   //延時函數,單位為ms
  181. {
  182.         uchar m;
  183.         uint n;
  184.         for(n=0;n<xms;n++)
  185.                 for(m=0;m<110;m++);
  186. }

復制代碼



作者: qq894308196    時間: 2016-12-23 23:45
STC12C單片機控制  正是我想要的,謝謝
作者: 大大29    時間: 2017-1-11 04:32
不錯 謝謝分享
作者: tkf008    時間: 2017-1-11 07:59
謝謝,先收下了!辛苦!
作者: 科學我究    時間: 2017-1-11 11:01
謝謝不錯不錯

作者: mj8abcd    時間: 2017-1-26 13:44
謝謝樓主分享。。。。。
作者: chysh    時間: 2017-6-20 21:47
失望,下載完才發現沒有仿真圖
作者: chysh    時間: 2017-6-20 21:47
失望,下載完才發現沒有仿真圖
作者: RenLC    時間: 2017-8-6 12:03
謝謝分享
作者: XXXZZZ    時間: 2017-8-7 16:49
沒有仿真圖
作者: 15659281171    時間: 2017-8-7 18:08

謝謝,先收下了!很快就要用到了!
作者: j6920    時間: 2018-4-9 18:21
正想做個小車 ,  有仿真更好了
作者: 906267461    時間: 2018-4-28 09:35
謝謝分享
作者: youguxiake    時間: 2018-10-13 22:09
這不是51單片機嗎

作者: 小號487560745    時間: 2019-11-9 00:10
牛逼大佬的作為




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1