一个按键控制十级变速跑马灯的试验

发布者:Yaqi最新更新时间:2018-03-05 来源: eefocus关键字:按键控制  十级变速  跑马灯 手机看文章 扫描二维码
随时随地手机看文章

在本课中,我们要用一个按键来实现跑马灯的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;//每次长时间的溢出,就置一个标记,以便主程序处理

    }

    }

    ――――――――――――――――――――――


关键字:按键控制  十级变速  跑马灯 引用地址:一个按键控制十级变速跑马灯的试验

上一篇:开发单片机程序时,初级工程师常犯的错误
下一篇:PCF8591与AT89C51单片机的接口程序

推荐阅读最新更新时间: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)**按键的电路连
[单片机]
S5PV210的中断系统和<font color='red'>按键</font><font color='red'>控制</font>外部中断
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
[单片机]
<font color='red'>按键</font><font color='red'>控制</font>移位显示
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
[单片机]
74ls164做的<font color='red'>跑马灯</font>c51程序
跑马灯-------寄存器版本
--------------拿到一个工程模板,首先要编译,编译成功之后再删除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
[单片机]
<font color='red'>跑马灯</font>-------寄存器版本
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--); }
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved