找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

新年制作——激光投影POV

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
激光投影POV——不炫酷送黑幣啊……
記得是2017年的一時(shí)興起開了這個(gè)坑,當(dāng)時(shí)做出來了顯示效果,然后因?yàn)閷W(xué)習(xí)就一直擱置。過了2年又是我的一時(shí)興起,這次總算是把它做完了。


這個(gè)制作用的材料:
1.      亞克力板
2.      亞克力鏡子-沒錯(cuò),那個(gè)反光板是塑料的,買薄的,好加工而且非常輕
3.      筆芯-做支架用
4.      CD機(jī)的光頭-用了那個(gè)電機(jī)和塑料底座
5.      5V激光管
6.      單片機(jī)-STC15F2K16S2-直插28腳封裝
7.      其他各種元器件-排針、三極管、電阻、電容、排線、洞洞板……

因?yàn)殡娐泛芎?jiǎn)單,所以沒畫PCB,只有控制板的電路圖,傳感器就是紅外對(duì)管,電機(jī)驅(qū)動(dòng)就是一個(gè)NMOS加上一些濾波電路,后來還拆了個(gè)12V電機(jī)上的轉(zhuǎn)速穩(wěn)定電路裝上了。
[電路圖]單片機(jī)IO不是直接驅(qū)動(dòng)激光管啊,都是有PNP三極管的!這里偷懶沒畫……

工作原理:
電機(jī)帶動(dòng)反光鏡(盡量)勻速旋轉(zhuǎn),紅外對(duì)管檢測(cè)鏡面位置,檢測(cè)到鏡面位置給單片機(jī)外部中斷信號(hào),單片機(jī)開始計(jì)時(shí)。這個(gè)時(shí)間結(jié)束的時(shí)候就是鏡面轉(zhuǎn)到開始顯示的位置,這時(shí)開始點(diǎn)亮激光管,從這里開始原理就和搖搖棒一樣了。
還有個(gè)有意思的創(chuàng)新,這回我用上位機(jī)串口通信,直接傳送點(diǎn)陣數(shù)據(jù)過來顯示,這樣就相當(dāng)于用電腦上面的字庫,解決了漢字字庫的問題,只要上位機(jī)文本框里能顯示,單片機(jī)就能把它投影出來。不過現(xiàn)在16個(gè)點(diǎn)還是有點(diǎn)捉雞,大的東西顯示不了……
[上位機(jī)界面]

程序結(jié)構(gòu):

占用資源:
外部中斷0               紅外對(duì)管
定時(shí)器0                    反光鏡旋轉(zhuǎn)一圈計(jì)時(shí)
定時(shí)器1                    激光點(diǎn)亮延時(shí)
定時(shí)器2                    波特率發(fā)生器
串口1
CCP0                           電機(jī)PWM
CCP1                           串口接收定時(shí)器-用于判定數(shù)據(jù)幀

上位機(jī)用C#寫的,VS2012編譯,Debug模式。代碼很簡(jiǎn)單,而且都是一些事件的觸發(fā),所以沒寫結(jié)構(gòu)出來,直接看代碼就可以,有注釋很容易理解。

注意事項(xiàng):
1.      單片機(jī)工作頻率為27MHz 串口通信波特率默認(rèn)9600 ;緟(shù)的設(shè)置在各個(gè)頭文件中。
2.      串口優(yōu)先級(jí)已經(jīng)調(diào)整為最高。
……剩下的想不起來了……等想起來再加吧……

最后……給自己發(fā)個(gè)廣告:我的微博最近很冷清呀,歡迎捧場(chǎng)~ (其實(shí)我從沒在上面發(fā)過電子相關(guān)的東西…………)


下位機(jī).zip (119.04 KB, 下載次數(shù): 56)

上位機(jī).zip (94.2 KB, 下載次數(shù): 52)



評(píng)分

參與人數(shù) 2黑幣 +116 收起 理由
凌凈清河 + 16 甚是敬佩!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

來自 2#
ID:84652 發(fā)表于 2020-9-1 00:16 | 只看該作者
微博里亂七八糟東西一堆,用戶體驗(yàn)極差,已棄用,請(qǐng)大家自動(dòng)忽略……
回復(fù)

使用道具 舉報(bào)

板凳
ID:1 發(fā)表于 2019-2-5 01:29 | 只看該作者
樓主的主程序如下:
  1. #include <STC15.h>
  2. #include <intrins.h>
  3. #include "main.h"
  4. #include "Uart.h"
  5. #include "U8_PWM.h"
  6. #include "display.h"
  7. #include "eeprom.h"

  8. typedef union
  9. {
  10.         u8 time8[2];
  11.         u16 time16;
  12. }TIME;

  13. volatile TIME t_speed;                //記錄定時(shí)器值
  14. volatile u16 speed;                //反光鏡轉(zhuǎn)速 (調(diào)試用數(shù)據(jù))
  15. volatile char t_count=0;//,d_count=0;                //轉(zhuǎn)速, 顯示 定時(shí)器溢出計(jì)數(shù)
  16. volatile u16 d_time = 25000;                        //點(diǎn)亮激光延時(shí) 初始化值用于第一次寫EEPROM
  17. u8 speed_pwm = 80;                        //反光鏡轉(zhuǎn)速 用于控制PWM占空比 初始化值用于第一次寫EEPROM

  18. void  delay_ms(unsigned char ms)
  19. {
  20.      unsigned int i;
  21.      do{
  22.           i = MAIN_Fosc / 13000;
  23.           while(--i)    ;
  24.      }while(--ms);
  25. }


  26. void Int0_Init(void)
  27. {
  28. //        EA = 1;
  29.         IT0 = 1;
  30.         EX0 = 1;
  31. }

  32. void Timer0_Init(void)                        //計(jì)算轉(zhuǎn)速作為延時(shí)參考
  33. {
  34.     TMOD |= 0x01;                  
  35.     TL0 = (65536-1000)%256;               
  36.     TH0 = (65536-1000) >> 8;
  37. //    EA = 1;       
  38.     ET0 = 1;                  
  39. //        TR0 = 1;                    
  40. }

  41. void Timer1_Init(void)                        //外部中斷后點(diǎn)亮激光延時(shí)
  42. {
  43.     TMOD |= 0x10;                  
  44.     TL1 = (65536-1000)%256;               
  45.     TH1 = (65536-1000) >> 8;
  46. //    EA = 1;       
  47.     ET1 = 1;                  
  48. //        TR1 = 1;                    
  49. }

  50. u8 Verify_Sum(u8 *DataInput, u16 len)//累加校驗(yàn)計(jì)算
  51. {
  52.         u8 sum=0;
  53.         u16 i;
  54.         for(i=0; i<len; i++)     //數(shù)據(jù)累加
  55.                 sum += DataInput[i];
  56.         return sum;
  57. }

  58. //整幀串口數(shù)據(jù)保存在UartRecvBuf[UARTRECVBUFSIZE]中
  59. //建議復(fù)制出來數(shù)據(jù)使用 防止處理過程中進(jìn)串口接收中斷丟失原始數(shù)據(jù)
  60. void UartDataRecv_Event(void)
  61. {
  62.         u8 i,j;
  63.         u16 Length;
  64.         xdata u8 datBuf[UARTRECVBUFSIZE];                //臨時(shí)數(shù)據(jù)存儲(chǔ)
  65.         xdata typePackage recvPackage;                                //接收數(shù)據(jù)包結(jié)構(gòu)體
  66.         code s8 AckBuf[] = {0x01, 0x10, 0x00, 0x00, 0x00, 0x00};        //Ack數(shù)據(jù)包
  67.         s8 DatBuf[10] = {0x01, 0x03, 0x00, 0x00, 0x04};                //還有5個(gè)數(shù)據(jù)在下面賦值
  68.        
  69. //        Uart_SendByte(UartBytesToRead);
  70. //        Uart_SendByte(0x49);
  71.         for(Length=0; Length<UartBytesToRead; Length++)                //復(fù)制數(shù)據(jù)
  72.         {
  73.                 datBuf[Length] = UartRecvBuf[Length];
  74.         }
  75.        
  76.         if(datBuf[0] != 0x01) return;
  77.         Length = 6 + (u16)(datBuf[3]<<8 | datBuf[4]);   //計(jì)算數(shù)據(jù)總長(zhǎng)度
  78.         if(Length != UartBytesToRead)                    //長(zhǎng)度不對(duì)放棄數(shù)據(jù)
  79.         {
  80.                 return;
  81.         }

  82.         //裝載數(shù)據(jù)
  83.         recvPackage.DeviceAddr = datBuf[0];
  84.         recvPackage.Function = datBuf[1];
  85.         recvPackage.Sequence = datBuf[2];
  86.         recvPackage.DataLength = (u16)(datBuf[3]<<8 | datBuf[4]);
  87.         recvPackage.Data = &datBuf[5];
  88.         recvPackage.Sum = datBuf[5 + recvPackage.DataLength];
  89.         if(recvPackage.Sum != Verify_Sum(recvPackage.Data, recvPackage.DataLength))        //數(shù)據(jù)校驗(yàn)
  90.                 return;

  91.         //SendAck
  92.         Uart_SendBuf(AckBuf, CountOfArray(AckBuf));
  93.        
  94. //        Uart_SendByte(recvPackage.Function);
  95.         switch(recvPackage.Function)               //幀功能判斷
  96.         {
  97.                 case 0x01:
  98.                         //Dis_WriteBuf("DataReceived!");
  99.                         for(i=0; i<STRINGLEN; i++)                        //寫顯存
  100.                                 for(j=0; j<16; j++)
  101.                                         DisBuf[i][j] = recvPackage.Data[j + i*16];
  102.                         break;
  103.                 case 0x02:      //從機(jī)接收數(shù)據(jù)
  104.                         Dis_WriteBuf("Recv-Func-0x02");
  105.                         if(speed_pwm != recvPackage.Data[1])
  106.                         {
  107.                                 speed_pwm = recvPackage.Data[1];
  108.                                 Load_U8_PWM(speed_pwm);                //轉(zhuǎn)速
  109.                                 IapEraseSector(IAP_ADDRESS_SPEED);                //EEPROM存儲(chǔ)數(shù)據(jù)
  110.                                 IapProgramByte(IAP_ADDRESS_SPEED, speed_pwm);
  111.                         }
  112.                         if(d_time != (u16)(recvPackage.Data[2]<<8 | recvPackage.Data[3]))        //點(diǎn)亮延時(shí)
  113.                         {
  114.                                 d_time = (u16)(recvPackage.Data[2]<<8 | recvPackage.Data[3]);
  115.                                 IapEraseSector(IAP_ADDRESS_DELAY);                //EEPROM存儲(chǔ)數(shù)據(jù)
  116.                                 IapProgramByte(IAP_ADDRESS_DELAY, recvPackage.Data[2]);
  117.                                 IapProgramByte(IAP_ADDRESS_DELAY+1, recvPackage.Data[3]);
  118.                         }
  119. //                        Uart_SendByte(0x33);
  120.                         break;
  121.                 case 0x03:      //主機(jī)請(qǐng)求數(shù)據(jù)
  122.                         Dis_WriteBuf("Recv-Func-0x03");
  123.                         delay_ms(15);                //隔斷Ack和Dat兩個(gè)數(shù)據(jù)包 避免上位機(jī)混淆
  124.                         DatBuf[5] = 0x00;        //裝載數(shù)據(jù)
  125.                         DatBuf[6] = speed_pwm;
  126.                         DatBuf[7] = (u8)(d_time>>8);
  127.                         DatBuf[8] = (u8)d_time;
  128.                         DatBuf[9] = Verify_Sum(&DatBuf[5], 4);
  129.                         Uart_SendBuf(DatBuf, CountOfArray(DatBuf));
  130. //                        Uart_SendByte(0x49);
  131.                         break;
  132.                 default:        //未知功能幀
  133.                         return;
  134.         }
  135. }

  136. void main(void)
  137. {
  138.         u8 i;
  139.        
  140.         P1M0 = 0x00;
  141.         P1M1 = 0x00;
  142.         P2M0 = 0x00;
  143.         P2M1 = 0x00;
  144. //        UartFuncPtr = UartDataRecv_Event;                //注冊(cè)串口數(shù)據(jù)處理函數(shù)
  145.        
  146.         EA = 1;
  147.        
  148. //第一次寫EEPROM時(shí)使用此代碼
  149. //        IapEraseSector(IAP_ADDRESS_SPEED);                //EEPROM存儲(chǔ)數(shù)據(jù)
  150. //        IapProgramByte(IAP_ADDRESS_SPEED, speed_pwm);
  151. //        IapEraseSector(IAP_ADDRESS_DELAY);                //EEPROM存儲(chǔ)數(shù)據(jù)
  152. //        IapProgramByte(IAP_ADDRESS_DELAY, d_time>>8);
  153. //        IapProgramByte(IAP_ADDRESS_DELAY+1, d_time);

  154.         speed_pwm = IapReadByte(IAP_ADDRESS_SPEED);                //EEPROM數(shù)據(jù)讀取
  155.         d_time = (u16)(IapReadByte(IAP_ADDRESS_DELAY)<<8 | IapReadByte(IAP_ADDRESS_DELAY+1));
  156.        
  157.         U8_PWM_Init();
  158.         for(i=5; i<=speed_pwm; i++)        //電機(jī)加速
  159.         {
  160.                 delay_ms(5);
  161.                 Load_U8_PWM(i);
  162.         }
  163. //        Load_U8_PWM(0);
  164.         delay_ms(200);                        //等待轉(zhuǎn)速穩(wěn)定
  165.        
  166.         Int0_Init();
  167.         Timer0_Init();                        //計(jì)算轉(zhuǎn)速作為延時(shí)參考
  168.         Timer1_Init();                        //外部中斷后點(diǎn)亮激光延時(shí)
  169.         Uart_Init();
  170.         delay_ms(50);
  171.         Uart_SendByte(0x98);        //發(fā)送復(fù)位標(biāo)識(shí)

  172.         Dis_WriteBuf("蘑菇~");        //開機(jī)默認(rèn)字幕
  173.         WDT_CONTR = 0x07;
  174.         WDT_CONTR |= 0x20;                //EN_WDT
  175.         while(1)
  176.         {
  177.                 WDT_CONTR |= 0x10;        //CLR_WDT
  178.                 if(DataProcFlag)
  179.                 {
  180.                         DataProcFlag = 0;
  181.                         //不知道為什么 調(diào)整串口優(yōu)先級(jí)最高以后還是需要關(guān)閉外部中斷
  182.                         EX0 = 0;                                //處理時(shí)間很長(zhǎng) 關(guān)閉外部中斷 不然會(huì)死機(jī)
  183.                         TR0 = 0;
  184.                         TR1 = 0;

  185.                         UartDataRecv_Event();

  186.                         EX0 = 1;
  187.                         TR0 = 1;
  188.                         TR1 = 1;

  189.                 }
  190. //                delay_ms(200);
  191. //                P40 = ~P40;
  192. //                Uart_SendByte(0x49);
  193.         }
  194. }

  195. void Int_Int0(void) interrupt 0               
  196. {
  197.         static char trig = 0;
  198.         if(trig)                //鏡面不絕對(duì)對(duì)稱 只使用其中一面
  199.         {
  200.                 t_speed.time8[1] = TL0;                        //讀取當(dāng)前定時(shí)器值作為速度
  201.                 t_speed.time8[0] = TH0;
  202.                 TL0 = 0;                                       //定時(shí)器重裝
  203.                 TH0 = 0;
  204.                 TR0 = 1;
  205.                 speed = t_speed.time16;// + t_count*65536;                //計(jì)算速度
  206.                 t_count = 0;                                                                //定時(shí)器溢出計(jì)數(shù)清零

  207.         //        d_time = 34000;                                                                //點(diǎn)亮激光延時(shí)
  208.                 TL1 = (65536-d_time)%256;               
  209.                 TH1 = (65536-d_time) >> 8;
  210.                 TR1 = 1;
  211.         }
  212.         trig = ~trig;
  213. }

  214. void Int_Timer0(void) interrupt 1                        //計(jì)算轉(zhuǎn)速作為延時(shí)參考
  215. {
  216.         t_count++;                                //定時(shí)器溢出計(jì)數(shù)
  217. }

  218. void Int_Timer1(void) interrupt 3                        //外部中斷后點(diǎn)亮激光延時(shí)
  219. {
  220.                 TR1 = 0;                //停止計(jì)時(shí)
  221.                 EX0 = 0;
  222. //                Display(0xFF, 0xFF);
  223. //                Dis_WriteBuf("2019新年快樂!!!~");
  224.                 Dis_String();
  225.                 EX0 = 1;
  226. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

地板
ID:141106 發(fā)表于 2019-2-5 14:04 | 只看該作者
不錯(cuò),很好,精彩。
回復(fù)

使用道具 舉報(bào)

5#
ID:474696 發(fā)表于 2019-2-8 17:40 | 只看該作者
感謝分享!
回復(fù)

使用道具 舉報(bào)

6#
ID:446674 發(fā)表于 2019-2-15 17:16 | 只看該作者
東西感覺不錯(cuò),不過我想說你真的很皮
回復(fù)

使用道具 舉報(bào)

7#
ID:3802 發(fā)表于 2019-2-16 17:01 | 只看該作者
感謝分享!
回復(fù)

使用道具 舉報(bào)

8#
ID:84652 發(fā)表于 2019-2-17 09:35 來自手機(jī) | 只看該作者
Arvin0011 發(fā)表于 2019-2-15 17:16
東西感覺不錯(cuò),不過我想說你真的很皮

啊哈哈哈哈哈哈~~~
回復(fù)

使用道具 舉報(bào)

9#
ID:399179 發(fā)表于 2019-2-20 21:26 來自手機(jī) | 只看該作者
感謝樓主分享!
回復(fù)

使用道具 舉報(bào)

10#
ID:399179 發(fā)表于 2019-2-20 21:31 來自手機(jī) | 只看該作者
只有反光鏡旋轉(zhuǎn)嗎
回復(fù)

使用道具 舉報(bào)

11#
ID:84652 發(fā)表于 2019-2-21 11:20 | 只看該作者
快樂眼淚 發(fā)表于 2019-2-20 21:31
只有反光鏡旋轉(zhuǎn)嗎

對(duì),能動(dòng)的只有反光鏡,光源不動(dòng)。
回復(fù)

使用道具 舉報(bào)

12#
ID:341823 發(fā)表于 2019-3-1 20:56 | 只看該作者
Rebuild target 'Target 1'
compiling main.c...
D:\Keil_v5\C51\Inc\STC\STC15.h(16): error C231: 'ACC': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(17): error C231: 'B': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(18): error C231: 'PSW': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(19): error C231: 'CY': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(20): error C231: 'AC': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(21): error C231: 'F0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(22): error C231: 'RS1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(23): error C231: 'RS0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(24): error C231: 'OV': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(25): error C231: 'P': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(26): error C231: 'SP': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(27): error C231: 'DPL': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(28): error C231: 'DPH': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(31): error C231: 'P0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(40): error C231: 'P1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(49): error C231: 'P2': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(58): error C231: 'P3': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(121): error C231: 'PCON': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(131): error C231: 'IE': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(132): error C231: 'EA': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(135): error C231: 'ES': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(136): error C231: 'ET1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(137): error C231: 'EX1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(138): error C231: 'ET0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(139): error C231: 'EX0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(140): error C231: 'IP': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(144): error C231: 'PS': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(145): error C231: 'PT1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(146): error C231: 'PX1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(147): error C231: 'PT0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(148): error C231: 'PX0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(154): error C231: 'TCON': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(155): error C231: 'TF1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(156): error C231: 'TR1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(157): error C231: 'TF0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(158): error C231: 'TR0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(159): error C231: 'IE1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(160): error C231: 'IT1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(161): error C231: 'IE0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(162): error C231: 'IT0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(163): error C231: 'TMOD': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(164): error C231: 'TL0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(165): error C231: 'TL1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(166): error C231: 'TH0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(167): error C231: 'TH1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(181): error C231: 'SCON': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(182): error C231: 'SM0': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(183): error C231: 'SM1': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(184): error C231: 'SM2': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(185): error C231: 'REN': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(186): error C231: 'TB8': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(187): error C231: 'RB8': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(188): error C231: 'TI': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(189): error C231: 'RI': redefinition
D:\Keil_v5\C51\Inc\STC\STC15.h(190): error C231: 'SBUF': redefinition
compiling U8_PWM.c...
compiling display.c...
compiling Uart.c...
compiling eeprom.c...
Target not created.
Build Time Elapsed:  00:00:00


一運(yùn)行就錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

13#
ID:84652 發(fā)表于 2019-3-2 10:22 | 只看該作者
864168613 發(fā)表于 2019-3-1 20:56
Rebuild target 'Target 1'
compiling main.c...
D:\Keil_v5\C51\Inc\STC\STC15.h(16): error C231: 'ACC ...

看樣子是頭文件重復(fù)的問題,可是我這沒出問題誒……順便上傳下我用的STC15.H頭文件……

QQ截圖20190302101635.jpg (33.09 KB, 下載次數(shù): 128)

QQ截圖20190302101635.jpg

STC15Header.zip

2.84 KB, 下載次數(shù): 12, 下載積分: 黑幣 -5

STC15.H頭文件

回復(fù)

使用道具 舉報(bào)

14#
ID:341823 發(fā)表于 2019-3-2 13:06 | 只看該作者
能不能吧電路圖畫玩
回復(fù)

使用道具 舉報(bào)

15#
ID:545631 發(fā)表于 2019-8-4 09:05 | 只看該作者
864168613 發(fā)表于 2019-3-2 13:06
能不能吧電路圖畫玩

可以的
回復(fù)

使用道具 舉報(bào)

16#
ID:362141 發(fā)表于 2019-8-4 10:20 | 只看該作者
還是有點(diǎn)不太理解原理呀,反光鏡是如何做到將激光反射到正前方的墻上的呢?還是說是反射到激光背后的墻上。但如果是背后的墻,則必有一條豎線無法顯示。若正前方的墻,則無法理解光路。才疏學(xué)淺,請(qǐng)不吝賜教
回復(fù)

使用道具 舉報(bào)

17#
ID:84652 發(fā)表于 2019-8-11 22:45 | 只看該作者
youlianning 發(fā)表于 2019-8-4 10:20
還是有點(diǎn)不太理解原理呀,反光鏡是如何做到將激光反射到正前方的墻上的呢?還是說是反射到激光背后的墻上。 ...

60度左右吧,不是正前,也不是正后。這個(gè)東西不能360度全顯示的,確實(shí)會(huì)被擋住一部分豎線。
回復(fù)

使用道具 舉報(bào)

18#
ID:405102 發(fā)表于 2019-8-24 21:54 | 只看該作者
很好,有創(chuàng)新精神致得我好好學(xué)習(xí)。只是看不懂程序沒辦法。如果圖片能長(zhǎng)期顯示和不間斷更換圖片(就是說當(dāng)?shù)谝粡垐D片轉(zhuǎn)換到第二圖片時(shí),中間沒有停止間隔),就更完美了。
回復(fù)

使用道具 舉報(bào)

19#
ID:405102 發(fā)表于 2019-8-24 22:08 | 只看該作者
王朗的誘惑 發(fā)表于 2019-8-11 22:45
60度左右吧,不是正前,也不是正后。這個(gè)東西不能360度全顯示的,確實(shí)會(huì)被擋住一部分豎線。

鏡子與激光不能在垂直線上,而是在上下直線上有一定的角度,而不是左右角度。橫向直線的長(zhǎng)短是由鏡面的寬度決定的,而不是鏡面的長(zhǎng)度來決定的。
回復(fù)

使用道具 舉報(bào)

20#
ID:84652 發(fā)表于 2019-9-4 15:32 | 只看該作者
liuhiong 發(fā)表于 2019-8-24 21:54
很好,有創(chuàng)新精神致得我好好學(xué)習(xí)。只是看不懂程序沒辦法。如果圖片能長(zhǎng)期顯示和不間斷更換圖片(就是說當(dāng)?shù)?...

點(diǎn)陣數(shù)據(jù)是電腦通過串口傳到單片機(jī)上的,傳輸速度不夠,如果換用速度更快的通信方式或許可以做到。
回復(fù)

使用道具 舉報(bào)

21#
ID:143767 發(fā)表于 2020-8-29 12:23 | 只看該作者
樓主你好,你說檢測(cè)鏡面旋轉(zhuǎn)速度的是紅外對(duì)管,分別是什么型號(hào)的?你的原理圖畫的P3和P4是接對(duì)管的吧,請(qǐng)問怎樣連接,我想既然是紅外對(duì)管每管應(yīng)該只有兩個(gè)管腳,不知怎樣與你圖上的P3和P4對(duì)接呢?謝謝!
回復(fù)

使用道具 舉報(bào)

22#
ID:235954 發(fā)表于 2020-8-31 17:29 | 只看該作者
上位機(jī)那個(gè)就是優(yōu)秀
回復(fù)

使用道具 舉報(bào)

23#
ID:84652 發(fā)表于 2020-9-1 00:15 | 只看該作者
dj3365191 發(fā)表于 2020-8-29 12:23
樓主你好,你說檢測(cè)鏡面旋轉(zhuǎn)速度的是紅外對(duì)管,分別是什么型號(hào)的?你的原理圖畫的P3和P4是接對(duì)管的吧,請(qǐng)問 ...

P3 接電機(jī),P3 輸出 PWM 方波,連電機(jī)驅(qū)動(dòng),這里其實(shí)就是一個(gè) MOS 管;
P4 接對(duì)管,型號(hào)就是常見的 TCRT5000,類似的就行,原理都是一樣的。紅外對(duì)管電路可以參考 http://www.elecfans.com/d/1063734.html ,也是類似的都可以,輸出方波到 P4 。
至于電路圖……因?yàn)檫@個(gè)電路用洞洞板做的,所以我是先在紙上設(shè)計(jì)好,最后才補(bǔ)畫的電路圖,當(dāng)時(shí)偷懶了,而且水平一般,畫的也不規(guī)范,還省略了好多細(xì)節(jié),還多包涵吧……
回復(fù)

使用道具 舉報(bào)

24#
ID:143767 發(fā)表于 2020-9-2 12:13 | 只看該作者
感謝樓主的回復(fù),明白了。
回復(fù)

使用道具 舉報(bào)

25#
ID:530691 發(fā)表于 2021-2-25 22:41 | 只看該作者
樓主你的上位機(jī)代碼可以發(fā)出來參考下嗎
回復(fù)

使用道具 舉報(bào)

26#
ID:84652 發(fā)表于 2021-2-27 14:15 | 只看該作者
zhuyaying 發(fā)表于 2021-2-25 22:41
樓主你的上位機(jī)代碼可以發(fā)出來參考下嗎

附件里有的
回復(fù)

使用道具 舉報(bào)

27#
ID:605142 發(fā)表于 2021-2-27 20:19 | 只看該作者
牛逼啊,大神,看到別人做的是有兩個(gè)旋轉(zhuǎn)的鏡子啊,只有一個(gè)激光,
τ 寶上有一體的振鏡模組,能在墻上掃出動(dòng)畫
回復(fù)

使用道具 舉報(bào)

28#
ID:84652 發(fā)表于 2021-2-28 01:09 | 只看該作者
hefq 發(fā)表于 2021-2-27 20:19
牛逼啊,大神,看到別人做的是有兩個(gè)旋轉(zhuǎn)的鏡子啊,只有一個(gè)激光,
τ 寶上有一體的振鏡模組,能在墻上掃 ...

害,過獎(jiǎng)了,我這就是經(jīng)費(fèi)有限,只能被迫搞出來一個(gè)手工原型……我還是很向往那種高精度的更炫酷的產(chǎn)品的。如果網(wǎng)友想仿制,我強(qiáng)烈推薦3D打印之類的框架,難度會(huì)低很多。
另:兩個(gè)旋轉(zhuǎn)鏡子的作品有鏈接嗎?表示好奇
回復(fù)

使用道具 舉報(bào)

29#
ID:886972 發(fā)表于 2021-2-28 01:34 | 只看該作者

只有反光鏡旋轉(zhuǎn)嗎
回復(fù)

使用道具 舉報(bào)

30#
ID:605142 發(fā)表于 2021-2-28 10:37 | 只看該作者
王朗的誘惑 發(fā)表于 2021-2-28 01:09
害,過獎(jiǎng)了,我這就是經(jīng)費(fèi)有限,只能被迫搞出來一個(gè)手工原型……我還是很向往那種高精度的更炫酷的產(chǎn)品的 ...

在τ 寶搜振鏡
我搜到這個(gè),只要一百多還有驅(qū)動(dòng),我沒買啊,不知道能不能用,這個(gè)是簡(jiǎn)易的,貴的很貴
回復(fù)

使用道具 舉報(bào)

31#
ID:605142 發(fā)表于 2021-2-28 10:37 | 只看該作者
王朗的誘惑 發(fā)表于 2021-2-28 01:09
害,過獎(jiǎng)了,我這就是經(jīng)費(fèi)有限,只能被迫搞出來一個(gè)手工原型……我還是很向往那種高精度的更炫酷的產(chǎn)品的 ...

https://item點(diǎn)taobao點(diǎn)com/item.htm?id=551252442809
剛才忘記鏈接了(自行替換.)
回復(fù)

使用道具 舉報(bào)

32#
ID:84652 發(fā)表于 2021-2-28 12:21 | 只看該作者
exlies 發(fā)表于 2021-2-28 01:34
只有反光鏡旋轉(zhuǎn)嗎

是的                               
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表