�һ�����
 ����ע��

QQ��¼

ֻ��һ�������ٿ�ʼ

����
�鿴: 13198|�ظ�: 11
��ӡ ��һ���� ��һ����
��������

PS2ң�س����Ϸ���-51��Ƭ��,stm32,arduino,��ݮ��Դ����

  [��������]
��ת��ָ��¥��
¥��
Ps2ң�س����Ϸ������DZ�����д����ps2ң��������ʱ���ͣ�������ѧϰ֮�ã�--51��stm32,arduino,��ݮ��  ���룬

�����Լ������Լ����ԣ��ڴ˲������⡣

1��PS2�ֱ�����
              PS2 �ֱ�����Ϸ����ң���ֱ���psx ϵ����Ϸ������ȫ�����dz�������֪ʲôʱ�������˴��� PS2 �ֱ������⣬�ƽ���ͨѶЭ�飬ʹ���ֱ����Խ�������������ң��ʹ�ã�����ң��������Ϥ�Ļ����ˡ�ͻ�����ص������������ֱ��Լ۱ȼ��ߡ������ḻ��������չ������Ӧ���С�
PS2 �ֱ����ܣ�
              PS2 ���ֱ������������������ɣ��ֱ���Ҫ�������Ͱ�����Ϣ������ͨ��Դ�������ֱ�����ʱ���ֱ����������Զ��������ӣ���δ���Գɹ���״̬�£��������̵���˸���ֱ��ϵĵ�Ҳ����˸�����Գɹ��󣬽��������̵Ƴ������ֱ��ϵ�Ҳ��������ʱ���԰���MODE������ѡ���ֱ�����ģʽ������ģʽ��ң������ģ��ֵ���̵�ģʽ��ң�˶�Ӧ�����ĸ�������ֻ���ĸ����޷�����Ӧ��
����������������Ƭ����������ʵ���������ֱ�֮����ͨѶ��
����������������
1
2
3
4
5
6
7
8
9
DI/DAT
DO/CMD
NC
GND
VDD
CS/SEL
CLK
NC
ACK

������ͼƬ
ͼ 1.1 ��������������
DI/DAT���ź����򣬴��ֱ������������ź���һ�� 8bit �Ĵ������ݣ�ͬ��������ʱ��
���½��ء��źŵĶ�ȡ��ʱ���ɸߵ��͵ı仯���������ɡ�
DO/CMD���ź����򣬴��������ֱ������źź� DI ���ԣ��ź���һ�� 8bit �Ĵ������ݣ�ͬ��������ʱ�ӵ��½��ء�
NC���ն˿ڣ�
GND����Դ�أ�
VDD��������������Դ����Դ��Χ 3~5V��
CS/SEL�������ṩ�ֱ������źš���ͨѶ�ڼ䣬���ڵ͵�ƽ��
CLK��ʱ���źţ����������������ڱ�������ͬ����
NC���ն˿ڣ�
ACK�����ֱ���������Ӧ���źš����ź���ÿ�� 8bits ���ݷ��͵�����һ�����ڱ��Ͳ��� CS һֱ���ֵ͵�ƽ������ CS �źŲ����ͣ�Լ 60 ΢��PS ����������һ�����衣�ڱ���ʱδʹ��ACK �˿ڡ������������ֱ�����ʱ���������� CS �ߵ�ƽ��������һ�����0x01�����ֱ����ظ�����ID��0x41=ģ���̵ƣ�0x73=ģ�����ơ������ֱ����� ID ��ͬʱ������������ 0x42���������ݣ������ֱ����ͳ� 0x5A�������������������ˡ���
�� 1�������������ձ�
˳��
DO
DI
Bit0��Bit1��Bit2��Bit3��Bit4��Bit5��Bit6��Bit7��
0
0X01
idle

1
0x42
ID

2
idle
0x5A

3
idle
data
SELECT��L3��R3��START��UP��RIGHT��DOWN��LEFT
4
idle
data
L2��R2��L1��R1�������𡢨w����
5
idle
data
PSS_RX��0x00=left��0xFF=right��
6
idle
data
PSS_RY��0x00=up��0xFF=down��
7
idle
data
PSS_LX��0x00=left��0xFF=right��
8
idle
data
PSS_LY��0x00=up��0xFF=down��

���а������£���ӦλΪ��0��������λΪ��1�������統����SELECT��������ʱ��
Data[3]=11111110B��
����ģʽʱ������ҡ�˷���ģ��ֵ��0x00~0xFF ֮�䣬��ҡ�˰��µļ�ֵֵ L3��R3 ��
��
�̵�ģʽʱ������ҡ��ģ��ֵΪ��Ч���Ƶ�����ʱ����Ӧ���� UP��RIGHT��DOWN��
LEFT�������𡢨w���������� L3��R3 ��Ч��
2��Ӳ�����ӷ�ʽ
�������� stm32ƽ�⳵ ���ӷ�ʽ
1
2
3
4
5
6
7
8
9
DI/DAT
DO/CMD
NC
GND
VDD
CS/SEL
CLK
NC
ACK
����������
���ܽ�
STM32
1
DI
PA8
2
DO
PA9
4
GND
GND
5
VDD
VCC
6
CS
PA10
7
CLK
PA11
3��������Ӧ˵��

ģʽ����ѡ������ģʽ����������ʹ��ң�������Ŀ���С�����������а����ӿڶ��������������������Լ�DIY�������ܡ�

ģ��ֵ��ӦXY����ͼ��



PS2_4WD����С����51�棩����Դ�루���֣���

  1. #include "STC12C5A60S2.h"
  2. #include "stdio.h"
  3. #include "ps2.h"

  4. #define ON 1     //ʹ��LED
  5. #define OFF 0    //��ֹLED
  6.                                                                                                       
  7. //������������
  8. sbit Left_motor_go=P2^1;           //������ǰ��AIN2
  9. sbit Left_motor_back=P2^2;           //����������AIN1
  10. sbit Right_motor_go=P2^4;           //�ҵ���ǰ��BIN2
  11. sbit Right_motor_back=P2^3;           //�ҵ�������BIN1
  12. sbit Left_motor_pwm=P2^0;           //����������PWMA
  13. sbit Right_motor_pwm=P2^5;           //�ҵ�������PWMB

  14. unsigned char pwm_val_left  =0; //��������
  15. unsigned char pwm_val_right =0;

  16. //�ٶȵ��ڱ��� 0-200,0��С,200����
  17. unsigned char push_val_left =150;  // ������ռ�ձ�push_val_left/200
  18. unsigned char push_val_right=150;  // �ҵ���ռ�ձ�push_val_right/200

  19. //���������Ŷ���
  20. sbit FM=P2^7;

  21. //������������
  22. sbit ServoPin=P0^5;


  23. //������ʱ����
  24. int servocount=0;

  25. //���������Ƕ�ֵ
  26. int myangle = 0;

  27. //����RGB�߲ʵ�����
  28. sbit LED_R = P4^6;        //LED_R����STC12C5A60S2��EA��P4^6���ܽ�
  29. sbit LED_G = P4^5;  //LED_G����STC12C5A60S2��ALE��P4^5���ܽ�
  30. sbit LED_B = P4^4;        //LED_B����STC12C5A60S2��PSEN��P4^4���ܽ�

  31. //�������ٿ���                          
  32. bit Left_PWM_ON=1;
  33. bit Right_PWM_ON=1;

  34. //ʱ��������С���ٶȣ�С��״̬��������
  35. unsigned char  time;                  
  36. int g_carstate = 0;
  37. int g_ServoState = 0;     //1��ҡ 2 ��ҡ
  38. //С���ٶȵ�λ
  39. int g_volume = 0;

  40. //С������״̬ö��
  41. enum{
  42.   enSTOP = 0,
  43.   enRUN,
  44.   enBACK,
  45.   enLEFT,
  46.   enRIGHT,
  47.   enUPLEFT,
  48.   enUPRIGHT,
  49.   enDOWNLEFT,
  50.   enDOWNRIGHT,
  51.   enSPINLEFT,
  52.   enSPINRIGHT
  53. }enCarState;

  54. //�궨�������ٶȵ�λ
  55. #define         enMinMin() do{\
  56.                        push_val_left =50; \
  57.                                            push_val_right =50;\
  58.                                            }while(0)

  59. #define         enMin() do{\
  60.                        push_val_left =100; \
  61.                                            push_val_right =100;\
  62.                                            }while(0)

  63. #define         enMidle() do{\
  64.                        push_val_left =150; \
  65.                                            push_val_right =150;\
  66.                                            }while(0)

  67. #define         enMax() do{\
  68.                        push_val_left =200; \
  69.                                            push_val_right =200;\
  70.                                            }while(0)
  71.                                                                                     
  72. /**
  73. * Function       delay
  74. * @author        Danny
  75. * @date          2017.08.16
  76. * @brief         ��ʱ����
  77. * @param         xms����ʱʱ�䣨ms��
  78. * @retval        void
  79. * @par History   ��
  80. */      
  81. void delay(unsigned int xms)                              
  82. {
  83.     unsigned int i,j;
  84.         for(i=xms;i>0;i--)                     
  85.     for(j=850;j>0;j--);
  86. }

  87. /**
  88. * Function       pwm_out_left_motor
  89. * @author        Danny
  90. * @date          2017.08.16
  91. * @brief         ����������        ,����push_val_left��ֵ�ı�����ת��,ռ�ձ�
  92. * @param         void
  93. * @retval        void
  94. * @par History   ��
  95. */                        
  96. void pwm_out_left_motor(void)               
  97. {  
  98.      if(Left_PWM_ON)
  99.      {
  100.           if(pwm_val_left<=push_val_left)
  101.               {
  102.                   Left_motor_pwm =1;
  103.               }
  104.               else
  105.               {
  106.                    Left_motor_pwm=0;
  107.           }
  108.           if(pwm_val_left>=200) //������200��������pwmΪ20ms��50hz
  109.               pwm_val_left=0;
  110.      }
  111.      else   
  112.      {
  113.           Left_motor_pwm=0;   //��δ����PWM��PWMA=0 ������ֹͣ
  114.      }
  115. }


  116. /**
  117. * Function       pwm_out_right_motor
  118. * @author        Danny
  119. * @date          2017.08.16
  120. * @brief         �ҵ�������        ,����pwm_val_right��ֵ�ı�����ת��,ռ�ձ�
  121. * @param         void
  122. * @retval        void
  123. * @par History   ��
  124. */
  125. void pwm_out_right_motor(void)                  
  126. {
  127.     if(Right_PWM_ON)
  128.     {
  129.         if(pwm_val_right<=push_val_right)      
  130.             {
  131.                 Right_motor_pwm=1;                                                        
  132.         }
  133.             else
  134.             {
  135.                 Right_motor_pwm=0;
  136.         }
  137.             if(pwm_val_right>=200) //������200��������pwmΪ20ms��50hz
  138.             pwm_val_right=0;
  139.     }
  140.     else   
  141.     {
  142.         Right_motor_pwm=0;          //��δ����PWM��PWMB=0�ҵ���ֹͣ
  143.     }
  144. }

  145.   /**
  146. * Function       servo_appointed_detection
  147. * @author        Danny
  148. * @date          2017.08.16
  149. * @brief         ������ת��ָ���Ƕ�
  150. * @param[in]     pos��ָ���ĽǶ�
  151. * @param[out]    void
  152. * @retval        void
  153. * @par History   ��
  154. */
  155. void servo_appointed_detection(int pos)
  156. {
  157.   int i = 0;
  158.   for (i = 0; i <= 15; i++) //����PWM��������Ч��ʱ�Ա�֤��ת����Ӧ�Ƕ�
  159.   {
  160.     myangle = pos;          //ģ������PWM
  161.         delay(20);
  162. }
  163. }

  164. /**
  165. * Function       run
  166. * @author        Danny
  167. * @date          2017.08.16
  168. * @brief         С��ǰ��
  169. * @param[in1]    time :��ʱʱ��
  170. * @param[out]    void
  171. * @retval        void
  172. * @par History   ��
  173. */
  174. void run(unsigned int time)
  175. {
  176.   //������ǰ��
  177.   Left_motor_go = 1;   //������ǰ��ʹ��
  178.   Left_motor_back = 0; //���������˽�ֹ
  179.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-200��
  180. // push_val_left=CarSpeed;
  181.          
  182.   //�ҵ���ǰ��
  183.   Right_motor_go=1;   //�ҵ���ǰ��ʹ��
  184.   Right_motor_back=0; //�ҵ������˽�ֹ
  185.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-200��
  186.   //push_val_right=CarSpeed;

  187.   //��ʱ
  188.   delay(time * 100);
  189.   return;
  190. }

  191. /**
  192. * Function       brake
  193. * @author        Danny
  194. * @date          2017.08.16
  195. * @brief         С��ɲ��
  196. * @param[in]     time
  197. * @param[out]    void
  198. * @retval        void
  199. * @par History   ��
  200. */
  201. void brake(unsigned int time)
  202. {
  203.   //������ֹͣ
  204.   Left_motor_go = 0;   //������ǰ����ֹ
  205.   Left_motor_back = 0; //���������˽�ֹ
  206.          
  207.   //�ҵ���ֹͣ
  208.   Right_motor_go=0;   //�ҵ���ǰ����ֹ
  209.   Right_motor_back=0;  //�ҵ������˽�ֹ

  210.   //��ʱ
  211.   delay(time * 100);
  212.   return;
  213. }

  214. /**
  215. * Function       left
  216. * @author        Danny
  217. * @date          2017.08.16
  218. * @brief         С����ת ��ת(���ֲ���,����ǰ��)
  219. * @param[in]     time :��ʱʱ��
  220. * @param[out]    void
  221. * @retval        void
  222. * @par History   ��
  223. */
  224. void left(unsigned int time)
  225. {
  226.   //������ֹͣ
  227.   Left_motor_go = 0;   //������ǰ����ֹ
  228.   Left_motor_back = 0;   //���������˽�ֹ
  229.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-200��
  230. // push_val_left=0;
  231.            
  232.   //�ҵ���ǰ��
  233.   Right_motor_go=1;   //�ҵ���ǰ��ʹ��
  234.   Right_motor_back=0;  //�ҵ������˽�ֹ
  235.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-200��
  236.   //push_val_right=CarSpeed;

  237.   //��ʱ
  238.   delay(time * 100);
  239.   return;
  240. }

  241. /**
  242. * Function       right
  243. * @author        Danny
  244. * @date          2017.08.16
  245. * @brief         С����ת ��ת(����ǰ��,���ֲ���)
  246. * @param[in]     time:��ʱʱ��
  247. * @param[out]    void
  248. * @retval        void
  249. * @par History   ��
  250. */
  251. void right(unsigned int time)
  252. {
  253.   //������ǰ��
  254.   Left_motor_go = 1;   //������ǰ��ʹ��
  255.   Left_motor_back = 0;   //���������˽�ֹ
  256.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-20��
  257.   //push_val_left=CarSpeed;
  258.          
  259.   //�ҵ���ֹͣ
  260.   Right_motor_go=0;   //�ҵ���ǰ����ֹ
  261.   Right_motor_back=0;  //�ҵ������˽�ֹ
  262.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-20��
  263.   push_val_right=0;

  264.   //��ʱ
  265.   delay(time * 100);  
  266.   return;
  267. }

  268. /**
  269. * Function       spin_left
  270. * @author        Danny
  271. * @date          2017.08.16
  272. * @brief         С��ԭ����ת ԭ����ת(���ֺ��ˣ�����ǰ��)
  273. * @param[in]     time:��ʱʱ��
  274. * @param[out]    void
  275. * @retval        void
  276. * @par History   ��
  277. */
  278. void spin_left(unsigned int time)
  279. {
  280.   //����������
  281.   Left_motor_go = 0;   //������ǰ����ֹ
  282.   Left_motor_back = 1;   //����������ʹ��
  283.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-20��
  284. // push_val_left=CarSpeed;
  285.          
  286.   //�ҵ���ǰ��
  287.   Right_motor_go=1;   //�ҵ���ǰ��ʹ��
  288.   Right_motor_back=0;  //�ҵ������˽�ֹ
  289.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-20��
  290. // push_val_right=CarSpeed;

  291.   //��ʱ
  292.   delay(time * 100);  
  293.   return;
  294. }

  295. /**
  296. * Function       spin_right
  297. * @author        Danny
  298. * @date          2017.08.16
  299. * @brief         С��ԭ����ת ԭ����ת(���ֺ��ˣ�����ǰ��)
  300. * @param[in]     time:��ʱʱ��
  301. * @param[out]    void
  302. * @retval        void
  303. * @par History   ��
  304. */
  305. void spin_right(unsigned int time)
  306. {
  307.   //������ǰ��
  308.   Left_motor_go = 1;   //������ǰ��ʹ��
  309.   Left_motor_back = 0;  //���������˽�ֹ
  310.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-20��
  311.   //push_val_left=CarSpeed;
  312.          
  313.   //�ҵ�������
  314.   Right_motor_go=0;   //�ҵ���ǰ����ֹ
  315.   Right_motor_back=1;  //�ҵ�������ʹ��
  316.   //����ָ���ܽŵ�PWMֵ�����Ŀ�ʵ�ֿ��٣�0-20��
  317.   //push_val_right=CarSpeed;

  318.   //��ʱ
  319.   delay(time * 100);  
  320.   return;
  321. }

  322. /**
  323. * Function       up_right
  324. * @author        Danny
  325. * @date          2017.08.16
  326. * @brief         С�������Ϸ�ת
  327. * @param[in]     time:��ʱʱ��
  328. * @param[out]    void
  329. * @retval        void
  330. * @par History   ��
  331. */
  332. void up_right(unsigned int time)        //����
  333. {
  334.         Left_motor_go=1;
  335.         Left_motor_back=0;
  336. //        push_val_left=CarSpeed+50;
  337.         push_val_left=18;

  338.         Right_motor_go=1;
  339.         Right_motor_back=0;
  340.         //push_val_right=CarSpeed;
  341.         push_val_right=10;
  342.     //��ʱ
  343.     delay(time * 100);
  344.     return;
  345. }

  346. /**
  347. * Function       down_right
  348. * @author        Danny
  349. * @date          2017.08.16
  350. * @brief         С�������·�ת
  351. * @param[in]     time:��ʱʱ��
  352. * @param[out]    void
  353. * @retval        void
  354. * @par History   ��
  355. */
  356. void down_right(unsigned int time)  //����
  357. {      
  358.         Left_motor_go=0;
  359.         Left_motor_back=1;
  360.         //push_val_left=CarSpeed+50;
  361.     push_val_left=18;
  362.         Right_motor_go=0;
  363.         Right_motor_back=1;
  364.         //push_val_right=CarSpeed;
  365.         push_val_right=10;
  366.         delay(time * 100);
  367.         return;
  368. }

  369. /**
  370. * Function       up_left
  371. * @author        Danny
  372. * @date          2017.08.16
  373. * @brief         С�������Ϸ�ת
  374. * @param[in]     time:��ʱʱ��
  375. * @param[out]    void
  376. * @retval        void
  377. * @par History   ��
  378. */
  379. void up_left(unsigned int time)         
  380. {
  381.            Left_motor_go=1;
  382.         Left_motor_back=0;
  383.         //push_val_left=CarSpeed;
  384.         push_val_left=10;
  385.         Right_motor_go=1;
  386.         Right_motor_back=0;
  387. //        push_val_right=CarSpeed+50;
  388.         push_val_right=18;
  389.         delay(time * 100);
  390.     return;
  391. }

  392. /**
  393. * Function       down_left
  394. * @author        Danny
  395. * @date          2017.08.16
  396. * @brief         С�������·�ת
  397. * @param[in]     time :��ʱʱ��
  398. * @param[out]    void
  399. * @retval        void
  400. * @par History   ��
  401. */
  402. void down_left(unsigned int time)      
  403. {
  404.            Left_motor_go=0;
  405.         Left_motor_back=1;
  406.         //push_val_left=CarSpeed;
  407.         push_val_left=10;
  408.         Right_motor_go=0;
  409.         Right_motor_back=1;
  410.         //push_val_right=CarSpeed+50;
  411.         push_val_right=18;
  412.         delay(time * 100);
  413.     return;
  414. }

  415. /**
  416. * Function       back
  417. * @author        Danny
  418. * @date          2017.08.16
  419. * @brief         С������
  420. * @param[in]     time ����ʱʱ��
  421. * @param[out]    void
  422. * @retval        void
  423. * @par History   ��
  424. */
  425. void back(unsigned int time)
  426. {
  427.   //����������
  428.   Left_motor_go = 0;   //������ǰ����ֹ
  429.   Left_motor_back = 1; //����������ʹ��
  430.          
  431.   //�ҵ�������
  432.   Right_motor_go=0;    //�ҵ���ǰ����ֹ
  433.   Right_motor_back=1;  //�ҵ�������ʹ��

  434.   //��ʱ
  435.   delay(time * 100);
  436.   return;
  437. }

  438. /**
  439. * Function       timer0
  440. * @author        Danny
  441. * @date          2017.08.16
  442. * @brief         TIMER0�жϷ����Ӻ�������PWM�źţ����ڿ��Ƶ����ٶȺͿ��ƶ�����ת��
  443. * @param[in]     void
  444. * @param[out]    void
  445. * @retval        void
  446. * @par History   ��
  447. */
  448. void timer0()interrupt 1
  449. {
  450.      int PulseWidth;
  451.      TH0=0Xff;              //100us��ʱ
  452.          TL0=0Xa4;
  453.          servocount++;
  454.                                                      //������������
  455.      PulseWidth = ((myangle*11)+500)/100 ;  //Ϊ�˽�0-180��ת��Ϊ��Ӧ������ֵ
  456.      if(servocount == PulseWidth)
  457.      {
  458.             ServoPin=0;                //�������ӿڵ�ƽ�ø�
  459.      }                  
  460.      if(servocount == 190)                   //190Ϊ���յ��Ի��õ�һ������ֵ
  461.      {
  462.             servocount = 0;
  463.         ServoPin=1;                //�������ӿڵ�ƽ�õ�
  464.      }
  465.          pwm_val_left++;
  466.          pwm_val_right++;
  467.          pwm_out_left_motor();
  468.          pwm_out_right_motor();
  469. }

  470. /**
  471. * Function       TIME0_Init
  472. * @author        Danny
  473. * @date          2017.08.16
  474. * @brief         ��ʱ��0��ʼ��
  475. * @param[in]     void
  476. * @param[out]    void
  477. * @retval        void
  478. * @par History   ��
  479. */
  480. void TIME0_Init(void)
  481. {
  482.         TMOD |=0X01;        //��ʱ��������ʽ1
  483.         TH0= 0Xff;      //100Us��ʱ
  484.     TL0= 0Xa4;
  485.         TR0= 1;                    //����T0����
  486.         ET0= 1;                    //����T0�ж�
  487.         EA = 1;                //�����ж�
  488. }

  489. /**
  490. * Function       color_led
  491. * @author        Danny
  492. * @date          2017.08.16
  493. * @brief         ��R,G,B��ɫ�IJ�ͬ�����γ�7�ֲ�ͬ��ɫ��
  494. * @param[in1]    Red����
  495. * @param[in2]    Green����
  496. * @param[in3]    Blue����
  497. * @retval        void
  498. * @par History   ��
  499. */
  500. void color_led(int v_iRed, int v_iGreen, int v_iBlue)
  501. {
  502.   //��ɫLED
  503.   v_iRed == ON ? (LED_R = 1): (LED_R = 0);

  504.   //��ɫLED
  505.   v_iGreen == ON ? (LED_G = 1): (LED_G = 0);

  506.   //��ɫLED
  507.   v_iBlue == ON ? (LED_B = 1): (LED_B = 0);
  508. }


  509. /**
  510. * Function       UartInit
  511. * @author        Danny
  512. * @date          2017.08.16
  513. * @brief         ���ڳ�ʼ��
  514. *                ��ʱ��������ʽ2��
  515. *                ʵ�ֵ����Զ����أ������ʵļ���Ϊ��
  516. *                (2��SMOD�η�/32)*(sysclk(��Ƭ���ڲ�ʱ��Ƶ��)/12)/(256-TH1)
  517.                  (ϵͳĬ���µ�SMOD��0��T1X12Ҳ��Ϊ0��)
  518.                                  1/32*((11059200/12)/(256-FD))=9600
  519. * @param[in]     void
  520. * @retval        void
  521. * @par History   ��
  522. */

  523. void UartInit(void)   
  524. {
  525.     SCON|=0x50;           //���пڹ����ڷ�ʽ1���������н���
  526.     TMOD|=0x20;                 //��ʱ��1������ʽ2���Զ����س�ֵ��TL1����ʼֵ��TH1������ֵ
  527.     TH1=0xfd;                 //��ʼ��������Ϊ9600
  528.         TL1=0xfd;
  529.     TI=1;                         //���ͱ�־λ��1����ʾ������һ���ֽ�
  530.     TR1=1;                         //��ʱ��1��ʼ����
  531. }

  532. /**
  533. * Function       PS2_control
  534. * @author        Danny
  535. * @date          2017.07.25
  536. * @brief         PS2����С��
  537. * @param[in]     void
  538. * @param[out]    void
  539. * @retval        void
  540. * @par History   ��
  541. */
  542. void PS2_control()
  543. {
  544.         //PS2������������
  545.         stPS2KeyValue * PS2;
  546.            
  547.                 PS2 = ReadPS2KeyValue();            //�����ֱ�����֮�����õ�ֵ
  548.                 //��data[3]��data[4]�����������ϳ�16λ������
  549.                 //��data[4]data[3]:��select����ʱ
  550.                 //FunBtn��0x1111 1111 1111 1110
  551.                 if((PS2->FunBtn & PSB_SELECT) == 0)
  552.                 {
  553.                   printf("PSB_SELECT!\n");
  554.                 }
  555.                
  556.                 if((PS2->FunBtn & PSB_START) == 0)
  557.                 {
  558.                   printf("PSB_START!\n");
  559.                 }
  560.                  
  561.                 if((PS2->FunBtn & PSB_L3) == 0)
  562.                 {
  563.                          printf("PSB_L3!\n");
  564.                          g_carstate = enSTOP;      //��С������Ϊֹͣ״̬
  565.                 }

  566.                 if((PS2->FunBtn & PSB_R3) == 0)
  567.                 {
  568.                         printf("PSB_R3!\n");
  569.                          g_carstate = enSTOP;      //��С������Ϊֹͣ״̬
  570.                 }

  571.                 if((PS2->FunBtn & PSB_PAD_UP) == 0)
  572.                 {
  573.                          printf("PSB_PAD_UP!\n");
  574.                          g_carstate = enRUN;       //��С������Ϊǰ��״̬
  575.                 }

  576.                 else if((PS2->FunBtn & PSB_PAD_RIGHT) == 0)
  577.                 {
  578.                          printf("PSB_PAD_RIGHT!\n");
  579.                          g_carstate = enRIGHT;     //��С������Ϊ״̬��ת
  580.                 }
  581.                 else if((PS2->FunBtn & PSB_PAD_DOWN) == 0)
  582.                 {
  583.                         printf("PSB_PAD_DOWN!\n");
  584.                         g_carstate = enBACK;       //��С������Ϊ����״̬
  585.                 }
  586.                 else if((PS2->FunBtn & PSB_PAD_LEFT) == 0)
  587.                 {
  588.                          printf("PSB_PAD_LEFT!\n");
  589.                          g_carstate = enLEFT;       //��С������Ϊ��ת״̬
  590.                 }
  591.          
  592.                 else                           //ȥ��������һֱִ�У��Ӵ˶����ſ�ֹͣ
  593.                 {
  594.                    g_carstate = enSTOP;        //��С������Ϊֹͣ״̬
  595.                 }
  596.                   
  597.                 if((PS2->FunBtn & PSB_L2) == 0)                         //����
  598.                 {
  599.                         printf("PSB_L2!\n");
  600. //                        CarSpeed=CarSpeed+40;
  601. //                        if(CarSpeed>=200)                       
  602. //                        {
  603. //                                CarSpeed = 200;
  604. //                        }
  605.             g_volume++;
  606.                         if(g_volume>=4)                          //���ٶ��������ĸ��ȼ�
  607.                         {
  608.                                 g_volume = 4;
  609.                         }
  610.                 }
  611.                  
  612.                 if((PS2->FunBtn & PSB_R2) == 0)                         //����
  613.                 {
  614.                         printf("PSB_R2!\n");
  615. //                        CarSpeed=CarSpeed-40;
  616. //                        if(CarSpeed<0)                       
  617. //                        {
  618. //                                CarSpeed = 50;
  619. //                        }
  620.                         g_volume--;
  621.                         if(g_volume <= 0)
  622.                         {
  623.                                 g_volume = 1;
  624.                         }
  625.                 }
  626.                 //���ֱ���L1�������º�������������ҡ�����ݣ�X1��Y1��֮������
  627.                 //����ҡ�˿���С��������״̬                        
  628.                 if((PS2->FunBtn & PSB_L1) == 0)
  629.                 {
  630.                          printf("PSB_L1!\n");
  631.                         
  632.                     if (PS2->Y1 < 5 && PS2->X1 > 80 && PS2->X1 < 180) //��
  633.                     {
  634.                               g_carstate = enRUN;
  635.                                   printf("enRUN\n");
  636.                     }
  637.                     else if (PS2->Y1 > 230 && PS2->X1 > 80 && PS2->X1 < 180) //��
  638.                     {
  639.                               g_carstate = enBACK;
  640.                                   printf("enBACK\n");
  641.                     }
  642.                     else if (PS2->X1 < 5 && PS2->Y1 > 80 && PS2->Y1 < 180) //��
  643.                     {
  644.                               g_carstate = enLEFT;
  645.                                   printf("enLEFT\n");
  646.                     }
  647.                     else if (PS2->Y1 > 80 && PS2->Y1 < 180 && PS2->X1 > 230)//��
  648.                     {
  649.                               g_carstate = enRIGHT;
  650.                            printf("enRIGHT\n");
  651.                     }
  652.                     else if (PS2->Y1 <= 80 && PS2->X1 <= 80) //����
  653.                     {
  654.                               g_carstate = enUPLEFT;
  655.                                   printf("enUPLEFT\n");
  656.                     }
  657.                     else if (PS2->Y1 <= 80 && PS2->X1 >= 180) //����
  658.                     {
  659.                               g_carstate = enUPRIGHT;
  660.                                   printf("enUPRIGHT\n");
  661.                     }
  662.                     else if (PS2->X1 <= 80 && PS2->Y1 >= 180) // ����
  663.                     {
  664.                               g_carstate = enDOWNLEFT;
  665.                                   printf("enDOWNLEFT\n");
  666.                     }
  667.                     else if (PS2->Y1 >= 180 && PS2->X1 >= 180) //����
  668.                     {
  669.                               g_carstate = enDOWNRIGHT;
  670.                                   printf("enDOWNRIGHT\n");
  671.                     }
  672.                     else//ͣ
  673.                     {
  674.                               g_carstate = enSTOP;
  675.                     }
  676.                 }
  677.                 //��R1������֮���������Ҳ�ҡ����������ʱ��
  678.                 //�Ҳ�ҡ�˿���С���Ķ���������״̬
  679.                 if((PS2->FunBtn & PSB_R1) == 0)
  680.                 {
  681.                      printf("PSB_R1!\n");
  682.                          //��ҡ��
  683.                      if (PS2->X2 < 5 && PS2->Y2 > 80 && PS2->Y2 < 180)    //��
  684.              {
  685.                 g_ServoState = 1;
  686.              }
  687.              else if (PS2->Y2 > 80 && PS2->Y2 < 180 &&PS2->X2 > 230)//��
  688.              {
  689.                 g_ServoState = 2;
  690.              }
  691.              else                                      //��λ
  692.              {
  693.                 g_ServoState = 0;
  694.              }
  695.                 }        
  696.                        
  697.                 if((PS2->FunBtn & PSB_TRIANGLE) == 0) // ���Ƶ�
  698.                 {
  699.                          printf("PSB_TRIANGLE!\n");

  700.                            color_led(ON, OFF, ON);

  701.                         // ReadPS2KeyValue();
  702.                 }
  703.                  
  704.                 if((PS2->FunBtn & PSB_CIRCLE) == 0)        // ��������
  705.                 {
  706.                          printf("PSB_CIRCLE!\n");
  707.                          g_carstate = enLEFT;  
  708.                         // ReadPS2KeyValue();
  709.                 }  
  710.       
  711.                 if((PS2->FunBtn & PSB_CROSS) == 0) // ����
  712.                 {
  713.                         printf("PSB_CROSS!\n");
  714.                         FM = 0;
  715.                         delay(500);
  716.                         FM = 1;
  717.                 //        ReadPS2KeyValue();
  718.                 }
  719.                  
  720.                 if((PS2->FunBtn & PSB_SQUARE) == 0)          //��������
  721.                 {
  722.                          printf("PSB_SQUARE!\n");
  723.                          g_carstate = enRIGHT;
  724.                         // ReadPS2KeyValue();
  725.                 }
  726. }
���ƴ���
ȫ������51hei���ص�ַ��

PS2_51������.zip

2.89 MB, ���ش���: 142, ���ػ���: �ڱ� -5

PS2_Arduino������.zip

778.8 KB, ���ش���: 75, ���ػ���: �ڱ� -5

PS2_STM32ƽ�⳵.rar

1.99 MB, ���ش���: 53, ���ػ���: �ڱ� -5

PS2_������.zip

1.56 MB, ���ش���: 33, ���ػ���: �ڱ� -5

PS2_4WD����С����51�棩����Դ��.rar

1.11 MB, ���ش���: 92, ���ػ���: �ڱ� -5

PS2_4WD����С����Arduino�棩����Դ��.rar

662.6 KB, ���ش���: 52, ���ػ���: �ڱ� -5

PS2_4WD����С����STM32�棩����.rar

1.34 MB, ���ش���: 93, ���ػ���: �ڱ� -5

PS2_4WD����С������ݮ�ɰ棩����Դ��.rar

636.92 KB, ���ش���: 91, ���ػ���: �ڱ� -5

����

�������� 1�ڱ� +50 ���� ����
admin + 50 �������ϵĺڱҽ�����

�鿴ȫ������

������:  QQ���Ѻ�ȺQQ���Ѻ�Ⱥ QQ�ռ�QQ�ռ� ��Ѷ΢����Ѷ΢�� ��Ѷ������Ѷ����
�ղ��ղ�18 �������� ����4 ����
�ظ�

ʹ�õ��� �ٱ�

ɳ��
ID:439952 ������ 2019-1-19 15:18 | ֻ��������

PS2_4WD����С����STM32�棩����.rar������Դ�ļ�����������������
�ظ�

ʹ�õ��� �ٱ�

����
ID:598292 ������ 2019-8-9 11:50 | ֻ��������
�����ˣ���л¥������
�ظ�

ʹ�õ��� �ٱ�

�ذ�
ID:208192 ������ 2019-9-2 10:15 | ֻ��������
��л¥������
�ظ�

ʹ�õ��� �ٱ�

5#
ID:608128 ������ 2019-9-7 10:13 | ֻ��������
�������������
�ظ�

ʹ�õ��� �ٱ�

6#
ID:626121 ������ 2019-10-18 13:15 | ֻ��������
лл¥������
�ظ�

ʹ�õ��� �ٱ�

7#
ID:376710 ������ 2020-2-6 12:47 | ֻ��������
��л¥��
�ظ�

ʹ�õ��� �ٱ�

8#
ID:365823 ������ 2020-2-14 14:02 | ֻ��������
��л¥������
�ظ�

ʹ�õ��� �ٱ�

9#
ID:742063 ������ 2021-5-1 16:56 | ֻ��������
�����������ĸ������ֵij���STC89C52��
�ظ�

ʹ�õ��� �ٱ�

10#
ID:920352 ������ 2021-5-13 21:46 | ֻ��������
�����ϣ�51������������!!!
�ظ�

ʹ�õ��� �ٱ�

11#
ID:920352 ������ 2021-5-13 21:47 | ֻ��������
�����ϣ�51������������!!!
�ظ�

ʹ�õ��� �ٱ�

12#
ID:949550 ������ 2024-1-17 16:11 | ֻ��������
�������Dz����ܵ����ϣ���л����
�ظ�

ʹ�õ��� �ٱ�

����Ҫ��¼���ſ��Ի��� ��¼ | ����ע��

�������ֹ���

С����|51�ڵ�����̳ |51�ڵ�����̳6Ⱥ QQ ����ԱQQ:125739409;��������QQȺ281945664

Powered by ��Ƭ���̳���

���ٻظ� ���ض��� �����б�