在本课中,我们要用一个按键来实现跑马灯的10级调速。这又会涉及到键的去抖的问题。
本课的试验结果是,每按一次按键,跑马速度就降低一级,共10级。
这里我们又增加了一个变量speedlever,来保存当前的速度档次。
在按键里的处理中,多了当前档次的延时值的设置。
请看程序:
――――――――――――――――
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include //包括一个52标准内核的头文件
sbit P10 = P1^0; //头文件中没有定义的IO就要自己来定义了
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit K1= P3^2;
bit ldelay=0; //长定时溢出标记,预置是0
uchar speed=10; //设置一个变量保存默认的跑马灯的移动速度
uchar speedlever=0; //保存当前的速度档次
char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
//一个按键控制的10级变速跑马灯试验
void main(void) // 主程序
{
uchar code LEDp[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入P1的值
uchar ledi; //用来指示显示顺序
uint n;
RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
RCAP2L =0x00;
TR2=1; //启动定时器
ET2=1; //打开定时器2中断
EA=1; //打开总中断
while(1) //主程序循环
{
if(ldelay) //发现有时间溢出标记,进入处理
{
ldelay=0; //清除标记
P1=ledp[ledi]; //读出一个值送到P1口
ledi++; //指向下一个
if(ledi==4)
{
ledi=0; //到了最后一个灯就换到第一个
}
}
if(!K1) //如果读到K1为0
{
for(n=0;n<1000;n++); //等待按键稳定
while(!K1); //等待按键松开
for(n=0;n<1000;n++); //等待按键稳定松开
speedlever++;
if(speedlever==10)speedlever=0;
speed=speedlever*3; //档次和延时之间的预算法则,也可以用查表方法,做出不规则的法则
}
}
}
//定时器2中断
timer2() interrupt 5
{
statIC uchar t;
TF2=0;
t++;
if((t==speed)||(t>30)) //比较一个变化的数值,以实现变化的时间溢出,同时限制了最慢速度为1秒
{
t=0;
ldelay=1;//每次长时间的溢出,就置一个标记,以便主程序处理
}
}
――――――――――――――――――――――
关键字:按键控制 十级变速 跑马灯
引用地址:
一个按键控制十级变速跑马灯的试验
推荐阅读最新更新时间:2024-03-16 15:56
S5PV210的中断系统和按键控制外部中断
一、按键及轮训方式处理按键(基于S5PV210) 1.什么是按键 1、按键的物理特性 (1)、平时没人按的时候,弹簧把按键按钮弹开。此时内部断开的。 (2)、有人按下的时候,手的力量克服弹簧的弹力,将按钮按下,此时内部保持接通(闭合)状态;如果手拿开,则弹簧作用下按钮又弹开,同时内部又断开。 (3)、一般的按键都有4个引脚,这4个引脚成2对:其中一对是常开触点(像上面描述的不按则断开,按下则闭合);一对是常闭触点(平时不按时是闭合的,按下后是断开的) 2、按键的电学原理(结合原理图分析) (1)硬件接法: SW5:GPH0_2、 SW6:GPH0_3、 SW7 8 9 10:GPH2_0 1 2 3 (2)**按键的电路连
[单片机]
51单片机 小车 L298N pwm调速 串口控制 按键控制
难点:1、串口定时器T1,和T0定时器优先级 2、pwm频率与占空比的设置 按键控制 按键1——前进 按键2——后退 按键3——加速 按键4——减速 (板子上只有四个按键) 串口控制 ‘1’——前进 ‘2’——后退 ‘3’——加速 ‘4’——减速 ‘5’——左转 ‘6’——右转 源码: #include reg52.h typedef unsigned char u8; typedef unsigned int u16; //L298N引脚定义 sbit ena = P0^0; sbit in1 = P0^1; sbit in2 = P0^2; sbit in3 = P0^3; sbit in4 = P0^4; sb
[单片机]
STM32F4寄存器编写跑马灯例程
最近由于在学习STM32看到别人用寄存器编程控制跑马灯,于是自己也想试一试。可是试了好久终究弄不出来。回头看了下库函数的调用关系才搞明白。首先通过查看GPIOA的设置函数发现设置如下: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) { uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00; /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); assert_param(IS_GPIO_
[单片机]
按键控制移位显示
应邀写个“按键移位”的程序。 要求使用4×4矩阵键盘,数码显示器。键盘接在P1,数码显示器接在P0、P2口。 电路、以及运行后的显示效果如下: C语言的控制程序如下: //======================================================= #include AT89X51.H char disp_buff ={0, 0, 0, 0, 0, 0, 0, 0};//显示缓冲单元 //------------------------------------------------------- delay1ms(unsigned int t) //1ms延时函数 { unsi
[单片机]
74ls164做的跑马灯c51程序
c51 74hc164--165--595c51 51单片机驱动74ls164跑马灯,好处是只用了2个端口即可实现,电路如下图所示: #include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit dat=P2^6; sbit clk=P2^7; uchar ii; uchar code seg7code = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0xff};//0-9,-,全灭 void sendbyte(uchar seg) { ucha
[单片机]
跑马灯-------寄存器版本
--------------拿到一个工程模板,首先要编译,编译成功之后再删除main()内容,这样编译不会出错。----------------- ** 程序步骤 ** 配置时钟使能寄存器 RCC AHB1ENR寄存器 用来时钟使能,然后 跑马灯IO口是PF9,PF10 ,GPIOF在RCC AHB1ENR 中是第五位, 给它写入1,其他位保持不变,所以要进行 “或运算” RCC- AHB1ENR|= 1 5;//把这个寄存器的第五位设置为1 配置PF9 MODER寄存器 F0是 0,1位 F1是2,3位,,,所以 F9 是18,19位, 给该位写入 01输出模式 a,首先要把这两位清零,在与01进行“或运算” (ps
[单片机]
STM32F407——多功能跑马灯
1、完成多功能跑马灯项目。。 2、预习中断。。 #正点视频第2讲开发板入门,第3讲stm32学习方法,第4讲NVIC中断优先级管理,第28讲外部中断实验-EXTI。。 ##多功能跑马灯 #include sys.h #include delay.h #include usart.h #include led.h #include beep.h #include key.h //ALIENTEK 探索者STM32F407开发板 实验3 //按键输入实验-库函数版本 //技术支持:www.openedv.com //淘宝店铺:http://eboard.taobao.com //广州市星翼电子科技有限公
[单片机]
矩阵按键控制动态数码管
#include reg52.h typedef unsigned char u8; typedef unsigned int u16; sbit KZA=P2^2; //位定义 sbit KZB=P2^3; sbit KZC=P2^4; #define GPIO_key P1 #define GPIO_DIG P0 u8 KeyValue; u8 code shumag ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delay(u16 i) { while(i--); }
[单片机]