当前位置:首页 > 单片机 > 单片机
[导读]突发奇想,于是便写了一个小程序用于控制台灯,这几天功能也在不断的完善中,目前基本已经完成.下面进行功能的简述的代码的分析.整体设计包含下位机程序和上位机程序.下位机用的c语言,上位机用的c#整个系统功能包括:定时

突发奇想,于是便写了一个小程序用于控制台灯,这几天功能也在不断的完善中,目前基本已经完成.下面进行功能的简述的代码的分析.

整体设计包含下位机程序和上位机程序.下位机用的c语言,上位机用的c#

整个系统功能包括:定时采集室温在电脑右下角显示,可联网校准电子时钟,可以电脑端快捷键控制台灯.视频中展示的顺序为


1,自动获取温度,图标动态显示室温 2,手动获取温度 3,按钮控制台灯 4 ,快捷键控制台灯 5,联网校准电子时钟 6最后展示


在任何界面只要按下快捷键便可以打开台灯(windows hook).


下面进行整个系统代码和原理的介绍.


下位机,


硬件上 ,包括 51单片机,ds1302,18b20,uln2003,pl2303 .硬件连接图如下:

下位机程序分析:


1 /************************************************************************/

2 // 本程序作者 HennSun ,转载请表明出处.

3 //

4 /************************************************************************/

5 #include

6 #include "uart.h"

7 #include "18b20.h"

8 #include "ds1302.h"

9 #define buff_size 5

10 sbit jdq=P1^0;

11 sbit key_led=P3^3;

12 unsigned int num;

13 unsigned char control=0,set_time=0;

14 unsigned char time[buff_size]; //用于设定时间

15 extern unsigned int temp;

16 extern unsigned char flag_get;

17

18 /*----------初始化定时器---------*/

19

20 void init_timer()

21 {

22 TMOD =0x01;//定时器设置 T0工作于方式1 16位

23 TH0=0xef;

24 TL0=0xf0;

25 ET0=1; //定时器 0 中断允许 .

26 TR0=1; // run the timer0 这个中断会让单片机查询中断向量表.

27 EA = 1; //打开总中断

28 }

29

30 //显示 open 字符

31 void disp_open()

32 {

33 unsigned int i=400;

34 while(i--)

35 {

36 P2=2;

37 P0=0x3f; //'O'

38 delay1(1);

39 P0=0X00;

40

41 P2=3;

42 P0=0x73; //'P'

43 delay1(1);

44 P0=0X00;

45

46 P2=4;

47 P0=0x79; //'E'

48 delay1(1);

49 P0=0X00;

50

51 P2=5;

52 P0=0x37; //'N'

53 delay1(1);

54 P0=0X00;

55 }

56

57 }

58 // 显示close 字符

59 void disp_close()

60 {

61 unsigned int i=400;

62 while(i--)

63 {

64 P2=2;

65 P0=0x39; //'C'

66 delay1(1);

67 P0=0X00;

68

69 P2=3;

70 P0=0x38; //'L'

71 delay1(1);

72 P0=0X00;

73

74 P2=4;

75 P0=0x3f; //'O'

76 delay1(1);

77 P0=0X00;

78

79 P2=5;

80 P0=0x6d; //'S'

81 delay1(1);

82 P0=0X00;

83

84 P2=6;

85 P0=0x79; //'E'

86 delay1(1);

87 P0=0X00;

88 }

89

90 }

91

92

93 /*----------------------------------------------------------------------------------------

94 这是主函数部分

95 --------------------------------------------------------------------------------------*/

96 void main()

97 {

98 unsigned int TempH,TempL;

99 unsigned char H, L ;

100 jdq=0;

101 init_timer();

102 init_ds1302();

103 UARTinit();

104

105 while(1)

106 {

107 if(flag_get) //定时读取当前温度

108 {

109

110 temp=ReadTemperature(); //这个函数8ms

111

112 if(temp&0x8000)

113 {

114 temp=~temp; // 取反加1

115 temp +=1;

116 }

117 TempH=temp>>4;

118 TempL=temp&0x0F;

119 TempL=TempL*6/10;//小数近似处理

120

121 H=(unsigned char)TempH;

122 L=(unsigned char)TempL;

123 /**/

124 send_char_com('a');

125 send_char_com(H);

126 send_char_com(L);

127 send_char_com('e');

128 flag_get=0;

129

130 } //这个循环用11ms

131 if(control)

132 {

133 jdq=~jdq;

134 if(jdq)

135 {

136 send_char_com('o');

137 send_char_com('e');

138 disp_open();

139 }

140 else

141 {

142 send_char_com('c');

143 send_char_com('e');

144 disp_close();

145 }

146 control=0;

147 }

148 if(set_time)

149 {

150 if((time[1]<0x60)||(time[2]<0x60)&&(time[3]<0x24))

151 {

152 set_ds1302(time[1],time[2],time[3]); // s , m ,h

153 //不知为何时间定时器自动停止. ,数组越界

154 set_time=0;

155 }

156 }

157 if(!key_led)

158 {

159 control=1;

160 }

161 //添加时钟显示代码

162 get_ds1302(); //2.23ms

163 } //不进第一个if 时间为 2ms 进入 13ms 这里指周期

164 }

165

166 /******************************************************************/

167 /* 定时器中断 */

168 /******************************************************************/

169 void tim(void) interrupt 1 using 1//中断用于温度检测

170 {

171 TR0=0; //关闭定时器

172 TH0=0x0f;//定时器重装值 定时器有没有中断标志位??,未清零?

173 TL0=0x00;

174 flag_get=1;//标志位有效

175 }

176

177

178

179

180 void UART_SER() interrupt 4

181 {

182 unsigned char Temp;

183 static unsigned char flag=0;

184 if(RI)

185 {

186 RI=0;

187 Temp=SBUF;

188 switch(Temp)

189

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭