
最新单片机控制电路开关程序完整程序[文档].pdf
9页附录 2 主程序 include define uchar unsigned char define uint unsigned int sbit KEYON P2 0 开始键 sbit KEYOFF P2 1 关闭键 sbit KEYSET P2 2 预约键 sbit KEYINC P2 3 加 1 键 sbit KEYDEC P2 4 减 1 键 sbit KEYFREE P2 5 预留键 sbit POWER P3 6 电源开关指示灯 sbit LED P3 3 按键指示灯 uchar code dispcode 0 x3f 0 x06 0 x05b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x40 0 9 的字型码 uchar data disbuf 0 0 0 0 显示缓冲区 uchar hour min 小时 分变量 bit Onflag flag uchar Setflag void delay uchar 延时子函数 void init void 定时器初始化子函数 uchar GetKeyNum 求按键号 void Keyprocess uchar 按键处理子函数 void calculate 计时子函数 void display 显示子函数 主函数 void main void init P1 0 x00 while 1 display 定时器 TO T1 初始化 外部中断0 初始化子函数 void init TMOD 0 x11 TO T1作定时器 工作方式1 TH0 65536 50000 256 定时 50ms TL0 65536 50000 256 TH1 65536 50000 256 TL1 65536 50000 256 IT0 1 选择外部中断0 为下降沿触发方式 EX0 1 开外部中断0 ET1 1 开定时器 1 ET0 1 开定时器0 EA 1 开总中断 TR0 1 显示子函数 void display uchar i j 0 x08 if Setflag 0 i 4 i disbuf i dispcode 10 else 正常显示时间 disbuf 0 dispcode min 10 分个位 disbuf 1 dispcode min 10 分十位 disbuf 2 dispcode hour 10 0 x80 小时个位 disbuf 3 dispcode hour 10 小时十位 if Setflag 0 i2 不显示前面的0 P0 0 else P0 disbuf i if Setflag 1 P1 j 调时 关断前两位位码 else P1 j 调分 关断后两位位码 delay 5 延时 P1 0 x00 j j 1 else 数码管正常显示 for i 0 i2 P0 0 不显示前面的0 else P0 disbuf i P1 j 位选通 delay 5 延时 P1 0X00 j j 1 外部中断 0 中断函数 void int0 interrupt 0 using 0 uchar keynum display 动态显示程序作为去抖动 if INT0 0 判断是否有按键按下 keynum GetKeyNum 有效键 获取键值 while INT0 0 等待按键释放 Keyprocess keynum 按键处理 定时器 0 中断子函数 void time0 interrupt 1 处理调时 显示器闪烁 static uchar ledcnt num 设置静态变量 TH0 65536 50000 256 定时 50ms TL0 65536 50000 256 if Onflag if ledcnt 10 10 X 50mS ledcnt 0 LED LED if Setflag 0 调时闪烁 num if num 5 num 0 flag flag 定时器 1 中断子函数 void time1 interrupt 3 TH1 65536 50000 256 TL1 65536 50000 256 calculate 计时 求按键号 uchar GetKeyNum uchar temp if KEYON 0 temp 1 if KEYOFF 0 temp 2 if KEYSET 0 temp 3 if KEYINC 0 temp 4 if KEYDEC 0 temp 5 if KEYFREE 0 temp 6 return temp 按键处理函数 void Keyprocess uchar x switch x case 1 KEYON 处理函数 Onflag 1 开 Onflag 标志 Setflag 0 关 Setflag 调时标志 if Setflag LED 0 else TR1 1 定时器 1 运行 执行计时程序 break case 2 KEYOFF 关处理 标志清0 Onflag 0 Setflag 0 hour 0 min 0 POWER 1 LED 1 break case 3 预约调时 调分键 处理调时标志 if Onflag 0 Setflag if Setflag 3 Setflag 1 break case 4 加 1 键 if Setflag 1 调时键 最大只能调到11 hour if hour 12 hour 0 if Setflag 2 调分键 最大只能调到59 min if min 60 min 0 break case 5 减 1 键 if Setflag 1 调时键 减小时处理 最小0 hour if hour 1 hour 12 if Setflag 2 调分键 减分处理 最小0 min if min 1 min 59 break 计算时间 void caculate static uint tcount tcount为定时次数 if hour min 0 tcount 1 次 50ms 到 改变定时次数 if tcount 1200 1200 50ms 1分钟 tcount 0 初始化定时次数 if min 0 min 60 hour min if min 0 继电器接通 LED 0 TR1 0 定时 void delay uchar x uchar j k for j x j 0 j for k 249 k 0 k 。
