|
智能小車光電測速LCD1602顯示程序,內含SD測速傳感器說明書(中文版).pdf文件以及測量行駛距離和測量行駛速度的51單片機和arduino平臺程序都有.
SD測速傳感器使用說明:
測速傳感器原理圖:
源代碼:
- /******************************************************************************************
- 程序名:檢查小車行使距離-LCD1602
- 編寫人:Yayi
- /******************************************************************************************/
- #include <STC12C5A60S2.H>//頭文件
- #include <LCD1602.h>
- sbit IN1=P1^0;
- sbit IN2=P1^1;
- sbit IN3=P1^2;
- sbit IN4=P1^3;
- unsigned int motor1=0; //計左電機碼盤脈沖值
- unsigned int motor2=0; //計右電機碼盤脈沖值
- unsigned int speed1=0; //計左電機碼盤脈沖值
- unsigned int speed2=0; //計右電機碼盤脈沖值
- unsigned int k=0;
- void Forward(void)
- {
- IN1=1;
- IN2=0;
- IN3=0;
- IN4=1;
- }
- /********************************************************************************************
- 定時器0初始化
- /********************************************************************************************/
- void T0_init (void)
- {
- TMOD = 0x01; //高4位控制T1,低4位控制T0
- EA = 1; //中斷總開關
- TH0 = 0; //16位計數寄存器T0高8位
- TL0 = 0; //16位計數寄存器T0低8位
- ET0 = 1; //T0中斷開關
- TR0 = 1; //T0啟動開關
- }
- /*********************************************************************************************
- 外部中斷INT0、INT1初始化函數
- /********************************************************************************************/
- void INT_init (void)
- {
- EA = 1; //中斷總開關
- EX0 = 1; //允許外部中斷0中斷
- IT0 = 1; //1:下沿觸發 0:低電平觸發
- EX1 = 1;
- IT1 = 1;
- }
- /*********************************************************************************************
- 主程序
- /********************************************************************************************/
- void main(void)
- {
- LCD1602_Init();
- LCD1602_Frist();
- INT_init();
- T0_init();
- Forward();
- while (1)
- {
- print(line_one,0,'M');
- print(line_one,1,'o');
- print(line_one,2,'t');
- print(line_one,3,'o');
- print(line_one,4,'r');
- print(line_one,5,'1');
- print(line_one,6,':');
- print(line_one,7,speed1/1000+0x30);
- print(line_one,8,speed1/100%10+0x30);
- print(line_one,9,speed1/10%10+0x30);
- print(line_one,10,speed1%10+0x30);
- print(line_one,11,' ');
- print(line_one,12,'C');
- print(line_one,13,'M');
- print(line_one,14,'/');
- print(line_one,15,'S');
- print(line_two,0,'M');
- print(line_two,1,'o');
- print(line_two,2,'t');
- print(line_two,3,'o');
- print(line_two,4,'r');
- print(line_two,5,'2');
- print(line_two,6,':');
- print(line_two,7,speed2/1000+0x30);
- print(line_two,8,speed2/100%10+0x30);
- print(line_two,9,speed2/10%10+0x30);
- print(line_two,10,speed2%10+0x30);
- print(line_two,11,' ');
- print(line_two,12,'C');
- print(line_two,13,'M');
- print(line_two,14,'/');
- print(line_two,15,'S');
- DELAY_MS(250);
- LCD1602_WriteCMD(CMD_clear);
- }
- }
- /*********************************************************************************************
- 外部中斷INT0計算電機1的脈沖
- /********************************************************************************************/
- void intersvr1(void) interrupt 0 using 1
- {
- motor1++;
- }
- /*********************************************************************************************
- 外部中斷INT1計算電機2的脈沖
- /********************************************************************************************/
- void intersvr2(void) interrupt 2 using 3
- {
- motor2++;
- }
- /********************************************************************************************
- 定時器0中斷函數
- 注意:這里的speed為簡單書寫,邏輯公式過程應該為
- speed2=小車輪子周長/碼盤格式*1秒的碼盤脈沖格數
- 定時器做出的效果為算出一秒內的距離
- /********************************************************************************************/
- void T0 (void) interrupt 1 using 2
- {
- TH0=(65536-1000)/256; //16位計數寄存器T0高8位,嘗試修改1000成其他值
- TL0=(65536-1000)%256; //16位計數寄存器T0低8位,嘗試修改1000成其他值
- k++; //k自加1
- if(k==1000)
- {
- k=0; //重新定義k的值
- speed1=motor1;
- speed2=motor2;
- motor1=0; //重新定義motor1的值
- motor2=0; //重新定義motor1的值
-
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
下載:
SD測速傳感器.rar
(375.38 KB, 下載次數: 149)
2017-4-4 16:39 上傳
點擊文件名下載附件
源代碼
|
|