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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4222|回復: 1
打印 上一主題 下一主題
收起左側

單片機智能藍牙遙控臺燈程序+solidworks模型

[復制鏈接]
跳轉到指定樓層
樓主
該藍牙臺燈使用藍牙模塊,兩個步進電機。1602液晶顯示屏幕組成,外殼均采用soliworks建模,用3D打印機打印。
隨機附送源程序,PCB原理圖,solidworks模型.



單片機源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar code table []= "Welcome to use  ";
  5. uchar code table1 []="Control    lamp ";
  6. uchar code table2[] ="State of lamp   ";
  7. uchar code table3[]="D1:On ";
  8. uchar code table4[]="D2:On ";
  9. uchar code table5[]="D3:On ";
  10. uchar code table6[]="flu:";
  11. uchar code table7[]="aro:";
  12. uchar a,b;                                        //藍牙命令
  13. uint count_1,count_2;      //0.5ms次數標識
  14. uint jd_1,jd_2; //角度標識
  15. uint i=0,j=0,k=0;//        控制繼電器標志位
  16. uint num;//1602 循環變量
  17. sbit pwm_1 =P1^3;          //PWM信號輸出
  18. sbit pwm_2 =P1^4;
  19. sbit zy =P1^5;           //角度左右按鍵檢測IO口
  20. sbit sx =P1^6;           //角度上下按鍵檢測IO口
  21. sbit D1=P1^0; //燈泡位聲明
  22. sbit D2=P1^1;
  23. sbit D3=P1^2;
  24. sbit en  =P3^5;  //液晶的脈沖
  25. sbit rs  =P3^4;  //液晶數據命令選擇端
  26. void delay(uchar i)//延時
  27. {
  28.         uchar j,k;
  29.         for(j=i;j>0;j--)
  30.     for(k=125;k>0;k--)
  31.         {};
  32. }

  33. void write_com(uchar com)  //液晶發送指令函數
  34. {
  35.         rs=0;
  36.         en=0;
  37.         P0=com;
  38.         delay(5);
  39.         en=1;
  40.         delay(5);
  41.         en=0;
  42. }
  43. void write_date(uchar date)  //液晶發送內容函數
  44. {
  45.         rs=1;
  46.         en=0;
  47.         P0=date;
  48.         delay(5);
  49.         en=1;
  50.         delay(5);
  51.         en=0;
  52. }

  53. void init_1602()
  54. {
  55.         en=0;
  56.         write_com(0x38);  //液晶初始化
  57.         write_com(0x0c);
  58.         write_com(0x06);
  59.         write_com(0x01);
  60.         for(num=0;num<16;num++)
  61.         {
  62.                 write_date(table[num]);
  63.                 delay(10);
  64.         }
  65.         write_com(0x80+0x40);
  66.         for(num=0;num<16;num++)
  67.         {
  68.                 write_date(table1[num]);
  69.                 delay(10);
  70.         }
  71.         delay(256);
  72.         write_com(0x01); //清屏
  73.         for(num=0;num<16;num++)//燈狀態顯示
  74.         {
  75.                 write_date(table2[num]);
  76.                 delay(10);
  77.         }
  78.         write_com(0x80+0x40+6);//定義新顯示地址
  79.         for(num=0;num<4;num++)  //顯示燈角度模塊
  80.         {
  81.                 write_date(table7[num]);
  82.                 delay(10);
  83.         }
  84.        
  85.         write_com(0x80+0x40+11);
  86.         for(num=0;num<4;num++)
  87.         {
  88.                 write_date(table6[num]);
  89.                 delay(10);
  90.         }
  91. }
  92. void init()
  93. {
  94.         /*舵機參數初始化*/
  95.         jd_1=3;
  96.         jd_2=3;
  97.         count_1=0;
  98.         count_2=0;
  99.        
  100.         TMOD=0X21;
  101.         TH1=0XFD;     //設置9600波特率
  102.         TL1=0XFD;
  103.         TH0  = 0xfe;
  104.         TL0  = 0x33;     //11.0592MZ晶振,0.5ms
  105.         ET0=1;
  106.     TR0=1;                 //定時器0開始
  107.         TR1=1;                        //定時器1
  108.         REN=1;
  109.         SM0=0;            //設置串行口
  110.         SM1=1;
  111.         EA=1;
  112.         ES=1;
  113. }
  114. void kgd()   //藍牙命令控制開關燈
  115. {
  116.         if(a=='a')
  117.         {
  118.                 a=0;
  119.                 i++;
  120.                 if(i==1)
  121.                 {
  122.                         D1=0; //燈1開
  123.                         /*顯示臺燈狀態*/
  124.                         write_com(0x80+0x40);
  125.                         for(num=0;num<6;num++)
  126.                         {
  127.                                 write_date(table3[num]);
  128.                                 delay(10);
  129.                         }
  130.                         while(a=='a');
  131.                 }
  132.                 if(i==2)
  133.                 {
  134.                         i=0;
  135.                         D1=1; //燈1關
  136.                         /*顯示臺燈狀態*/
  137.                         write_com(0x80+0x40+4); //定義新的地址,
  138.                         write_date(0x46);  //顯示f
  139.                         delay(10);
  140.                         write_com(0x80+0x40+5); //地址加一
  141.                         write_date(0x46);//顯示f
  142.                         delay(10);
  143.                         write_com(0x80+0x40+6);
  144.                         write_date(0x20);
  145.                         delay(10);
  146.                         write_com(0x80+0x40+1);
  147.                         write_date(0x31);
  148.                 }
  149.         }
  150.         if(a=='b')
  151.         {
  152.                 a=0;
  153.                 j++;
  154.                 if(j==1)
  155.                 {
  156.                         D2=0; //臺燈2開
  157.                         /*顯示臺燈狀態*/

  158.                         write_com(0x80+0x40);
  159.                         for(num=0;num<6;num++)
  160.                         {
  161.                                 write_date(table4[num]);
  162.                                 delay(10);
  163.                         }
  164.                         while(a=='b');
  165.                 }
  166.                 if(j==2)
  167.                 {
  168.                         j=0;
  169.                         D2=1; //臺燈2關
  170.                         /*顯示臺燈狀態*/
  171.                         write_com(0x80+0x40+4); //定義新的地址,
  172.                         write_date(0x46);  //顯示f
  173.                         delay(10);
  174.                         write_com(0x80+0x40+5); //地址加一
  175.                         write_date(0x46);//顯示f
  176.                         delay(10);
  177.                         write_com(0x80+0x40+6);
  178.                         write_date(0x20);
  179.                         delay(10);
  180.                         write_com(0x80+0x40+1);
  181.                         write_date(0x32);
  182.                 }
  183.         }

  184.         if(a=='c')
  185.         {
  186.                 a=0;
  187.                 k++;
  188.                 if(k==1)
  189.                 {
  190.                         D3=0; //臺燈2開
  191.                         /*顯示臺燈狀態*/
  192.                         write_com(0x80+0x40);
  193.                         for(num=0;num<6;num++)
  194.                         {
  195.                                 write_date(table5[num]);
  196.                                 delay(10);
  197.                         }
  198.                         while(a=='c');
  199.                 }
  200.                 if(k==2)
  201.                 {
  202.                         k=0;
  203.                         D3=1; //臺燈2關
  204.                         /*顯示臺燈狀態*/
  205.                         write_com(0x80+0x40+4); //定義新的地址,
  206.                         write_date(0x46);  //顯示f
  207.                         delay(10);
  208.                         write_com(0x80+0x40+5); //地址加一
  209.                         write_date(0x46);//顯示f
  210.                         delay(10);
  211.                         write_com(0x80+0x40+6);
  212.                         write_date(0x20);
  213.                         delay(10);
  214.                         write_com(0x80+0x40+1);
  215.                         write_date(0x33);
  216.                 }
  217.         }
  218. }

  219. void keyscan()              //藍牙角度掃描
  220. {
  221.    while(a=='C')               //角度左按鍵是否按下
  222.    {
  223.                         a='0';
  224.                         jd_1=jd_1-1;                 //角度標識-1
  225.                         if(jd_1==0)
  226.                         jd_1=1;                       //保持角度
  227.                         count_1=0;              //按鍵按下 則20ms周期從新開始
  228.                         write_com(0x80+0x40+10);
  229.                         write_date(0x30+jd_1);

  230.         }
  231.    while(a=='D')               //角度右按鍵是否按下
  232.    {
  233.                         a='0';
  234.                         jd_1=jd_1+1;                 //角度標識加1
  235.                            if(jd_1==5)
  236.                         jd_1=4;               //已經是180度,則保持
  237.                         count_1=0;              //按鍵按下 則20ms周期從新開始
  238.                         write_com(0x80+0x40+10);
  239.                         write_date(0x30+jd_1);

  240.         }
  241.         /***************************************************/
  242.            if(a=='A')               //角度上按鍵是否按下
  243.    {

  244.                         a='0';
  245.                         jd_2=jd_2+1;                 //角度標識加1
  246.                         count_2=0;              //按鍵按下 則20ms周期從新開始
  247.                         if(jd_2==6)
  248.                         jd_2=5;               //已經是180度,則保持
  249.                         write_com(0x80+0x40+14);
  250.                         write_date(0x30+jd_2);                       
  251.         }
  252.        
  253.    if(a=='B')               //角度下按鍵是否按下
  254.    {

  255.                         a='0';
  256.                         jd_2=jd_2-1;                 //角度標識加1
  257.                         count_2=0;              //按鍵按下 則20ms周期從新開始
  258.                         if(jd_2==1)
  259.                         jd_2=2;               //已經是180度,則保持       
  260.                         write_com(0x80+0x40+14);
  261.                         write_date(0x30+jd_2);
  262.         }
  263. }
  264. void main()
  265. {
  266.         init();  //初始化
  267.         init_1602();
  268.         while(1)
  269.         {
  270.                 kgd();
  271.                 keyscan();
  272.         }
  273. }
  274. void Time0_Int() interrupt 1 //中斷程序
  275. {
  276.         TH0  = 0xfe;             //重新賦值
  277.         TL0  = 0x33;
  278.     if(count_1< jd_1)              //判斷0.5ms次數是否小于角度標識
  279.         {
  280.                 pwm_1=1;                  //確實小于,PWM輸出高電平
  281.         }
  282.     else
  283.       pwm_1=0;                  //大于則輸出低電平

  284.        
  285.         /***********************************************************/
  286.          if(count_2< jd_2)              //判斷0.5ms次數是否小于角度標識
  287.         {
  288.                 pwm_2=1;                  //確實小于,PWM輸出高電平
  289.         }
  290.     else
  291.       pwm_2=0;                  //大于則輸出低電平
  292.        
  293.     count_1=(count_1+1);          //0.5ms次數加1
  294.     count_1=count_1%40;     //次數始終保持為40 即保持周期為20ms
  295.        
  296.         count_2=(count_2+1);          //0.5ms次數加1
  297.     count_2=count_2%40;     //次數始終保持為40 即保持周期為20ms
  298. }
  299. void lanya() interrupt 4  //串行口接收藍牙命令
  300. {
  301.         ES=0;
  302.         if(RI==1)
  303.         {
  304.                 a=SBUF;
  305.                 RI=0;
  306.         }
  307.         ES=1;
  308. }
復制代碼

所有資料51hei提供下載:

51hei.png (11.2 KB, 下載次數: 148)

51hei.png

程序7.zip

43.98 KB, 下載次數: 26, 下載積分: 黑幣 -5

智能藍牙遙控臺燈源碼

臺燈3D模型.zip

685.81 KB, 下載次數: 27, 下載積分: 黑幣 -5

soldworks

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:594575 發表于 2019-12-17 09:25 | 只看該作者
very good, thanks
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 雨宫琴音一区二区在线 | 久久久久国产精品 | 日韩欧美在线观看 | 国产精品伦理一区二区三区 | 五月婷婷激情 | av永久| 国产精品亚洲精品日韩已方 | av香港经典三级级 在线 | 99re99| 亚洲激精日韩激精欧美精品 | 亚洲一区二区在线免费观看 | 亚洲一区二区三区四区五区午夜 | 午夜精品影院 | 日韩高清电影 | 久久久久久久av麻豆果冻 | 精品不卡| 亚洲一区二区三区四区五区中文 | 日本超碰 | 一区二区三区免费 | 国产精品国产成人国产三级 | 欧美在线一区二区三区四区 | 欧美99| 91免费看片| 国产日韩一区二区三免费高清 | 看片国产 | 久草青青草 | 中文一区| 资源首页二三区 | 操网站 | 97伦理电影网 | a级在线观看 | 91精品国产乱码久久久久久 | 亚洲网址在线观看 | 天天操精品视频 | 国产美女高潮 | 精品国产乱码久久久久久牛牛 | 精品国产一区二区三区性色 | 国产成人在线视频播放 | 91看片网站| 成年人精品视频在线观看 | 国产精品成人一区二区三区 |