找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4551|回复: 2
收起左侧

关于通过按键改变led灯闪烁次数的程序

[复制链接]
ID:230847 发表于 2018-5-7 13:29 | 显示全部楼层 |阅读模式
本帖最后由 一束光的旅程 于 2018-5-7 13:30 编辑

机械人一个,现在自学单片机。自己画了一个板子的原理图。想实现LED灯闪烁次数的调节。按键KS按下,灯开始闪烁,按动TJ,闪烁次数增加。
先编了一个小程序,但是不能实现闪烁次数的增加。
请各位大神指点一下。谢谢啦
程序如下:
#include <reg51.h>
#include <stdio.h>
sbit KS=P0^0;
sbit PWM=P1^0;
sbit TJ=P3^2;
#define uint unsigned int
uint a;
void delays_ms(uint xms)
{
  uint i,j;
        for(i=xms;i>0;i--)
                for(j=115;j>0;j--);
}

void main(void)
{
uint x;
P0=0xFF;
P1=0x00;
if(TJ==0)
        {
                delays_ms(20);
                if(TJ==0);
                {
                  a++;
                }
                while(!TJ);
        }
if(KS==0)
{
   delays_ms(20);
   if(KS==0)
        {                        
         for(x=a;x>0;x--)
      {
           delays_ms(200);
           PWM=1;
                  delays_ms(200);
           PWM=0;
           }
        while(!KS);
        }
}
}

示意图.JPG

工控板.zip

70.69 KB, 下载次数: 7

回复

使用道具 举报

ID:213173 发表于 2018-5-7 21:01 | 显示全部楼层
给你改了一下,纠正两处错误,增加了减数功能。
#include <reg51.h>
//#include <stdio.h>//多余
sbit KS=P0^0;
sbit PWM=P1^0;
sbit TJ=P3^2; //+键
sbit TJ1=P3^3;//-键
#define uint unsigned int
uint a=1;//初始1
void delays_ms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=115;j>0;j--);
}

void main(void)
{
        uint x;
        P1=0x00;
        P0=0xFF;
        while(1)//必须要有主循环
        {
                if(TJ==0)
                {
                        delays_ms(20);
//                        if(TJ==0);//多了一个分号
                        if(TJ==0)
                        {
                                if(a<10)//最大数限制
                                        a++;
                        }
                        while(!TJ);
                }
/**********增加减数部分**********/
                if(TJ1==0)
                {
                        delays_ms(20);
                        if(TJ1==0)
                        {
                                if(a>1)//最小数限制
                                        a--;
                        }
                        while(!TJ1);
                }
/********************************/
                if(KS==0)
                {
                        delays_ms(20);
                        if(KS==0)
                        {                        
                                for(x=a;x>0;x--)
                      {
                                        delays_ms(200);
                                        PWM=1;
                                        delays_ms(200);
                                        PWM=0;
                                }
                                while(!KS);
                        }
                }
        }
}
回复

使用道具 举报

ID:230847 发表于 2018-5-8 17:55 | 显示全部楼层
wulin 发表于 2018-5-7 21:01
给你改了一下,纠正两处错误,增加了减数功能。
#include
//#include //多余

谢谢大神,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表