芯片复制51单片机实现红外遥控风扇程序
单片机源程序如下:
- /*******************************************************************************
- * 实验名 : 1602显示红外线值实验
- * 使用的IO : 电机用P1口,键盘使用P3.0、P3.1、P3.2、P3.3
- * 实验效果 : LCD1602显示出读取到的红外线的值
- * 注意 :
- *******************************************************************************/
- 芯片复制#include<reg51.h>
- 芯片复制#include"lcd.h"
- 芯片复制#include <stdio.h>
- //#include "delay.h"
- sfr T2CON = 0xC8; //timer2 control register
- sfr RCAP2L = 0xCA;
- sfr RCAP2H = 0xCB;
- sfr TL2 = 0xCC;
- sfr TH2 = 0xCD;
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- #define FOSC 12000000L //System frequency
- #define BAUD 9600 //UART baudrate
- /*Define UART parity mode*/
- #define NONE_PARITY 0 //None parity
- #define ODD_PARITY 1 //Odd parity
- #define EVEN_PARITY 2 //Even parity
- #define MARK_PARITY 3 //Mark parity
- #define SPACE_PARITY 4 //Space parity
- #define PARITYBIT NONE_PARITY //Testing even parity
- sbit bit9 = P2^2; //P2.2 show UART data bit9
- bit busy;
- sbit Sevro_moto_pwm = P3^5; //接舵机信号端输入PWM信号调节速度
- sbit FanPin=P1^0;
- unsigned int pwm_val_left = 0;//变量定义
- unsigned char push_val_left =14;//舵机归中,产生约,1.5MS 信号
- unsigned int timer=0; //延时基准变量
- unsigned int Servo_Ctr=0;
- unsigned int pwm_val_Fan=0;
- unsigned char Fan_speed=199;
- int flag=0;
- sbit IRIN=P3^2;
- unsigned char code CDIS1[13]={" Red Control "};
- unsigned char code CDIS2[13]={" IR-CODE:--H "};
- unsigned char code Test_OK[2]={"OK"};
- unsigned char IrValue[6];
- unsigned char Time;
- unsigned char IrOK=0;
- /*--------------------------------------------------------------
- 函数声明
- --------------------------------------------------------------*/
- void InitUART(void);
- char putchar(char c);
- void IrInit();
- void DelayMs(unsigned int );
- void SendString(char *s);
- void SendData(BYTE dat);
- void pwm_Servomoto_angle(unsigned int angle,unsigned int Servo_time);
- void pwm_Servomoto(void);
- void test_servo(void);
- void Motor_Ctr(void);
- void Pwm_Motor(void);
- /*******************************************************************************
- * 函数名 : main
- * 函数功能 : 主函数
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void main()
- {
- unsigned char i;
- //串口初始化
-
- // printf("\r\n\n\r\n");
-
- TMOD=0X11;
- TH1=(65536-100)/256; //100US定时
- TL1=(65536-100)%256;
- TH0=0;
- TL0=0;
- TR1= 1;
- ET1= 1;
- ET0= 1;
- EA = 1;
- IrInit();
- LcdInit();
- InitUART();
- LcdWriteCom(0x80);
-
- for(i=0;i<13;i++)
- {
- LcdWriteData(CDIS1[i]);
- }
- LcdWriteCom(0x80+0x40);
- for(i=0;i<13;i++)
- {
- LcdWriteData(CDIS2[i]);
- }
- while(1)
- {
- test_servo();
- IrValue[4]=IrValue[2]>>4; //高位
- IrValue[5]=IrValue[2]&0x0f; //低位
- if(IrValue[4]>9)
- {
- LcdWriteCom(0xc0+0x09); //设置显示位置
- LcdWriteData(0x37+IrValue[4]); //将数值转换为该显示的ASCII码
- }
- else
- {
- LcdWriteCom(0xc0+0x09);
- LcdWriteData(IrValue[4]+0x30); //将数值转换为该显示的ASCII码
- }
- if(IrValue[5]>9)
- {
- LcdWriteCom(0xc0+0x0a);
- LcdWriteData(IrValue[5]+0x37); //将数值转换为该显示的ASCII码
- }
- else
- {
- LcdWriteCom(0xc0+0x0a);
- LcdWriteData(IrValue[5]+0x30); //将数值转换为该显示的ASCII码
- }

芯片解密