找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2772|回复: 4
打印 上一主题 下一主题
收起左侧

我写的程序选位加1之后全部都变了,怎样加程序使他每个位置都独立变化?

[复制链接]
跳转到指定楼层
楼主
ID:69319 发表于 2015-7-7 01:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define INT16U unsigned int
sbit          K1 = P3^1;
sbit          K2 = P3^2;
sbit          K3 = P3^3;
sbit WEI0=P2^4;
sbit WEI1=P2^5;
sbit WEI2=P2^6;
sbit WEI3=P2^7;
unsigned char Time;
uchar Count=0;
unsigned char a,b,c,d;
unsigned char code XIANSHI[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//0x40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X18};//段码
unsigned char code WEI[]={0X7F,0XBF,0XDF,0XEF};        //位码
void Delay10ms(unsigned int c) ;
unsigned char Key_Scan();
void Timer();


void main(void)
{
unsigned char ledValue, keyNum;

        ledValue = 0x01;

        while (1)
        {       
                keyNum = Key_Scan();  //扫描键盘

                if (keyNum == 1) //如果键值返回1
                {
                        P0=0x40;
                        P2=0X0F;       
                }
                else if (keyNum == 2)//如果键值返回2
                {
                      a++;
              if(a==4)
                {
                  a=0;
                }

                  switch(a)
        {  
                  case 0:
                  WEI0 = 1;WEI1 = 1;WEI2 = 1;WEI3 = 0;
            //P2=0X7F;
            Delay10ms(1);
            break;
          case 1:
                   WEI0 = 1;WEI1 = 1;WEI2 = 0;WEI3 = 1;
           //P2=0XBF;
            Delay10ms(1);
            break;
          case 2:
                   WEI0 = 1;WEI1 = 0;WEI2 = 1;WEI3 = 1;
           //P2=0XDF;
            Delay10ms(1);
            break;
          case 3:
                   WEI0 = 0;WEI1 = 1;WEI2 = 1;WEI3 = 1;
           // P2=0XEF;
            Delay10ms(1);
            break;
                }
    }
         if (keyNum == 3)//如果键值返回3
        {   
          Timer();
         Count = Count+1;         
                if(Count>9) //【最大值】
                {
                        Count=0;
                }
        P0=XIANSHI[Count];
        }
}
}
unsigned char Key_Scan()
{
        unsigned char keyValue = 0 , i; //保存键值

        //--检测按键1--//
        if (K1==0)                //检测按键K1是否按下
        {
                Delay10ms(1);        //消除抖动

                if (K1==0)        //再次检测按键是否按下
                {
                        keyValue = 1;
                        i = 0;
                        while ((i<50&&K1==0))         //检测按键是否松开
                        {
                                Delay10ms(1);
                                i++;
                        }
                }
        }
        if (K2==0)                //检测按键K2是否按下
        {
                Delay10ms(1);        //消除抖动

                if (K2==0)        //再次检测按键是否按下
                {
                        keyValue = 2;
                        i = 0;
                        while ((i<50&&K2==0))         //检测按键是否松开
                        {
                                Delay10ms(1);
                                i++;
                        }
                }
        }
        if (K3==0)                //检测按键K3是否按下
        {
                Delay10ms(1);        //消除抖动

                if (K3==0)        //再次检测按键是否按下
                {
                        keyValue = 3;
                        i = 0;
                        while ((i<50&&K3==0))         //检测按键是否松开
                        {
                                Delay10ms(1);
                                i++;
                        }
                }
        }
        return keyValue;   //将读取到键值的值返回
}
void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

        //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }

        }      
}

   void Timer()
{
        TMOD = 0x01;     //定时器0选择工作方式1
    TH0  = 0x3C;         //设置初始值,定时50MS
    TL0  = 0xB0;
    EA   = 1;             //打开总中断
    ET0  = 1;                 //打开定时器0中断
    TR0  = 1;                 //启动定时器0       
}

void Timer0() interrupt 1
{       
        TH0 = 0x3C;         //设置初始值
        TL0 = 0xB0;
    Time++;
        if(Time == 20)
        {       
                Time = 0;
               
                }

}
这是程序和电路图。我写的程序选位加1之后全部都变了,怎样加程序使他每个位置都独立变化?


QQ拼音截图未命名.png (14.6 KB, 下载次数: 123)

QQ拼音截图未命名.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

5#
ID:69319 发表于 2015-7-7 14:50 | 只看该作者
这是文件夹

新建文件夹 (2).rar

60.01 KB, 下载次数: 2

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:69319 发表于 2015-7-7 14:49 | 只看该作者
yanjibao 发表于 2015-7-7 09:54
把电路图传上来吧,程序太长没那么多时间一个一个看,跑起来就知道了

大神帮我看一下谢谢了

新建文件夹 (2).rar

60.01 KB, 下载次数: 2

回复

使用道具 举报

板凳
ID:84959 发表于 2015-7-7 10:19 | 只看该作者
你这个的话,你可以使用下面的表达式参考下:个位:x%10  十位:x/10%10  百位:x/100%10  千位:x/1000%10

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

沙发
ID:81808 发表于 2015-7-7 09:54 来自手机 | 只看该作者
把电路图传上来吧,程序太长没那么多时间一个一个看,跑起来就知道了

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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