本帖最后由 liupk 于 2018-3-14 14:35 编辑
3.这个是主程序
cls_display();关闭数码管显示
cls_buzz();关闭蜂鸣器
cls_led();关闭LED
cls_relay();关闭继电器
根据题目要求需要实现从L1~L8依次逐个点亮,再依次逐个熄灭;然后检查数码管,从左到右依次点亮数码管的所有段码,再依次从左到右熄灭。
test_led_on();从左到右依次点亮LED
test_led_off();从右到左依次关闭LED
test_display_on();从左到右依次点亮数码管
test_display_off();从左到右依次关闭数码管
下面配置定时器0作为时钟,配置为每隔1ms进入一次中断:(进入中断做下面三个事情) ConfigTimer0(1);
(1)每隔1ms进入一次中断。ms+1,当ms为1000时候代表一秒钟时间
(2)每隔1ms进入一次中断。display(); 执行一次,也就是数码管动态刷新时间为1ms
(3)每隔1ms进入一次中断。intr+1,当intr为10的时候代表10ms时间此时把按键的标志位置一key_flag = 1; 表示每隔10ms按键扫描一次
下面配置波特率,根据要求把波特率配置为9600;(11.0592M计算波特率更加准确。) ConfigUART(9600);
void InterruptUART() interrupt 4
{
if (RI) //接收到字节
{
RI = 0; //手动清零接收中断标志位
RxdByte = SBUF; //接收到的数据保存到接收字节变量中
if(uart_flag)//这个条件是为了题目中 (5) 读取运行时间命令中,低4位保留,各位为0,返回3个字节的时间数据,用16进制的BCD码表示,排列顺序分别为:时 分 秒。
如果系统运行的时间为12时24分16秒,则收到读取时间命令字后,然会3个字节,分别是:0x12 0x24 0x16 如果收到了
0XB0 则返回当前时间到串口
{
uart_flag = 0;
uart_sendstring(str);
}
}
if (TI) //字节发送完毕
{
TI = 0; //手动清零发送中断标志位
}
}
|