第12课可编程自动控制跑马灯.pdf
第第 12 课,可编程自动控制控制跑马灯课,可编程自动控制控制跑马灯 这一颗,我们学习如何让跑马灯自动按照我们预定的顺序进行。这种控制在工控场合 经常用到。 这个程序里,我们预先定义了一个变化的顺序 speedcode,每跑一圈灯就根据预定设置 的表格数据来决定下一圈的跑马速度。这样我们就实现了按照预定的顺序自动变化运行。 请看代码 ----------------------------------- define uchar unsigned char //定义一下方便使用 define uint unsigned int define ulong unsigned long include //包括一个 52 标准内核的头文件 sbit P10 P10; //头文件中没有定义的 IO 就要自己来定义了 sbit P11 P11; sbit P12 P12; sbit P13 P13; bit ldelay0; //长定时溢出标记,预置是 0 uchar speed10; //设置一个变量保存跑马灯的移动速度 uchar code speedcode[10]{3,1,5,12,3,20,2,10,1,4}; //10 个预定义的速度 char code dx516[3] _at_ 0 x003b;//这是为了仿真设置的 //可编程自动控制跑马灯 void mainvoid // 主程序 { uchar code ledp[4]{0 xfe,0 xfd,0 xfb,0 xf7};//预定的写入 P1 的值 uchar ledi; //用来指示显示顺序 uchar i; RCAP2H 0 x10; //赋 T2 的预置值 0 x1000,溢出 30 次就是 1 秒钟 RCAP2L 0 x00; TR21; //启动定时器 ET21; //打开定时器 2 中断 EA1; //打开总中断 while1 //主程序循环 { ifldelay //发现有时间溢出标记,进入处理 { ldelay0; //清除标记 P1ledp[ledi]; //读出一个值送到 P1 口 ledi; //指向下一个 ifledi4 { ledi0; //到了最后一个灯就换到第一个 //每跑一圈灯就根据预定设置的表格来决定下一圈的跑马速度 speedspeedcode[i]; i;ifi10i0; } } } } //定时器 2 中断 timer2 interrupt 5 { static uchar t; TF20; t; iftspeed //比较一个变化的数值,以实现变化的时间溢出 { t0; ldelay1;//每次长时间的溢出,就置一个标记,以便主程序处理 } } 请编译,运行,并看运行结果。 作业改为每跑 2 圈才改变一次跑马速度。