第11课一个按键控制的10级变速跑马灯试验.pdf
第第 11 课,一个按键控制的课,一个按键控制的 10 级变速跑马灯试验级变速跑马灯试验 在本课中,我们要用一个按键来实现跑马灯的 10 级调速。这又会涉及到键的去抖的问 题。 本课的试验结果是,每按一次按键,跑马速度就降低一级,共 10 级。 这里我们又增加了一个变量 speedlever,来保存当前的速度档次。 在按键里的处理中,多了当前档次的延时值的设置。 请看程序 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; sbit K1 P32; bit ldelay0; //长定时溢出标记,预置是 0 uchar speed10; //设置一个变量保存默认的跑马灯的移动速度 uchar speedlever0; //保存当前的速度档次 char code dx516[3] _at_ 0 x003b;//这是为了仿真设置的 //一个按键控制的 10 级变速跑马灯试验 void mainvoid // 主程序 { uchar code ledp[4]{0 xfe,0 xfd,0 xfb,0 xf7};//预定的写入 P1 的值 uchar ledi; //用来指示显示顺序 uint n; RCAP2H 0 x10; //赋 T2 的预置值 0 x1000,溢出 30 次就是 1 秒钟 RCAP2L 0 x00; TR21; //启动定时器 ET21; //打开定时器 2 中断 EA1; //打开总中断 while1 //主程序循环 { ifldelay //发现有时间溢出标记,进入处理 { ldelay0; //清除标记 P1ledp[ledi]; //读出一个值送到 P1 口 ledi; //指向下一个 ifledi4 { ledi0; //到了最后一个灯就换到第一个 } } ifK1 //如果读到 K1 为 0 { forn0;n1000;n; //等待按键稳定 whileK1; //等待按键松开 forn0;n30 //比较一个变化的数值,以实现变化的时间溢出,同时限制了最慢速 度为 1 秒 { t0; ldelay1;//每次长时间的溢出,就置一个标记,以便主程序处理 } } 请打开 lesson11 目录的工程,编译,运行,看结果 按 K1,速度则降低一次,总共 10 个档次。 作业 用查表的方法改变每个档次的跑动速度,而不是例程里的档次和延时的 3 倍关系。