码农自己制作小风扇,妈妈再也用不担心我们夏天晚上被热醒了。
简要描述:
硬件线路连接=>硬件编程=>软件编程
实现功能 :
1、红外线遥控板 控制风扇开关 挡速
2、液晶显示器 显示风扇的工作情况
3、客户端 显示风扇工作情况
4、开启风扇时 记录上次的挡速 关键技术: 1、硬件中断 2、红外线通信 3、串口通信 4、FALSE存储
硬件截图:
客户端软件截图:
![](https://images0.cnblogs.com/blog/675788/201410/272348222534830.jpg)
硬件编程源码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /******************************************************************** 2 * 文件名 : FanServer.c 3 * 创建人 : wu_zhuojun,2014年2月23日 北京 4 * 版本号 : 3.0 5 ***********************************************************************/ 6 7 #include <reg51.h> 8 #include <intrins.h> 9 10 #define uchar unsigned char 11 #define uint unsigned int 12 13 uchar LCD_ID_1[16] = {"I have a dream!"}; 14 uchar LCD_ID_2[16] = {"Speed: 0"}; 15 16 void delay(uchar x); //x*0.14MS 17 void delay1(int ms); 18 void beep(); 19 20 sbit IRIN = P3^3; //红外接收器数据线 21 sbit BEEP = P1^5; //蜂鸣器驱动线 22 sbit RELAY= P1^4; //继电器驱动线 23 24 uchar IRCOM[7]; 25 26 sbit E=P2^7; //1602使能引脚 27 sbit RW=P2^6; //1602读写引脚 28 sbit RS=P2^5; //1602数据/命令选择引脚 29 30 //==========直流电机参数定义 begin 31 sbit PWM = P1^0; //定义直流电机的控制端口 32 uchar PWM_ON = 0 ; //风扇档数 33 //==========直流电机参数定义 end 34 35 36 //==========FLASH参数定义 begin 37 sbit scl=P1^5; //24c08 SCL 38 sbit sda=P3^6; //24c08 SDA 39 //==========FLASH参数定义 End 40 41 /******************************************************************** 42 * 名称 : delay() 43 * 功能 : 延时,延时时间大概为140US。 44 * 输入 : 无 45 * 输出 : 无 46 ***********************************************************************/ 47 void Delay2() 48 { 49 int i,j; 50 for(i=0; i<=10; i++) 51 for(j=0; j<=2; j++) 52 ; 53 } 54 55 56 /******************************************************************** 57 * 名称 : enable(uchar del) 58 * 功能 : 1602命令函数 59 * 输入 : 输入的命令值 60 * 输出 : 无 61 ***********************************************************************/ 62 void enable(uchar del) 63 { 64 P0 = del; 65 RS = 0; 66 RW = 0; 67 E = 0; 68 Delay2(); 69 E = 1; 70 Delay2(); 71 } 72 73 /******************************************************************** 74 * 名称 : write(uchar del) 75 * 功能 : 1602写数据函数 76 * 输入 : 需要写入1602的数据 77 * 输出 : 无 78 ***********************************************************************/ 79 void write(uchar del) 80 { 81 P0 = del; 82 RS = 1; 83 RW = 0; 84 E = 0; 85 Delay2(); 86 E = 1; 87 Delay2(); 88 } 89 90 /******************************************************************** 91 * 名称 : L1602_init() 92 * 功能 : 1602初始化,请参考1602的资料 93 * 输入 : 无 94 * 输出 : 无 95 ***********************************************************************/ 96 void L1602_init(void) 97 { 98 enable(0x01); 99 enable(0x38); 100 enable(0x0c); 101 enable(0x06); 102 enable(0xd0); 103 } 104 105 /******************************************************************** 106 * 名称 : L1602_char(uchar hang,uchar lie,char sign) 107 * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下 108 L1602_char(1,5,'b') 109 * 输入 : 行,列,需要输入1602的数据 110 * 输出 : 无 111 ***********************************************************************/ 112 void L1602_char(uchar hang,uchar lie,char sign) 113 { 114 uchar a; 115 if(hang == 1) a = 0x80; 116 if(hang == 2) a = 0xc0; 117 a = a + lie - 1; 118 enable(a); 119 write(sign); 120 } 121 122 /******************************************************************** 123 * 名称 : L1602_string(uchar hang,uchar lie,uchar *p) 124 * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下 125 L1602_string(1,5,"ab cd ef;") 126 * 输入 : 行,列,需要输入1602的数据 127 * 输出 : 无 128 ***********************************************************************/ 129 void L1602_string(uchar hang,uchar lie,uchar *p) 130 { 131 uchar a; 132 if(hang == 1) a = 0x80; 133 if(hang == 2) a = 0xc0; 134 a = a + lie - 1; 135 enable(a); 136 while(1) 137 { 138 if(*p == '