找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2450|回复: 5
收起左侧

按键控制1-9的加减循环 和STC单片机内部存储功能怎么实现

[复制链接]
ID:517505 发表于 2019-4-22 13:12 | 显示全部楼层 |阅读模式
100黑币
现在程序可以实现 1加操作到9  和9减到1  
怎么样才可以把他改成 1加到9 如果再按加变成1    和 9减到1 再按减变回9
和 怎么可以把当前显示的数 存储到 内部寄存器EEPROM里面
单片机型号 STC 89C52
1-9.png
#include<reg52.h>
sbit k1=P3^6;
sbit k2=P3^7;



void delay(unsigned char i)
{
     unsigned char j,k,x;
         for(k=0;k<i;k++)
         for(j=0;j<255;j++)
         for(x=0;x<25;x++);
}
unsigned char smg[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};              //数码管显示1-9


unsigned a;
                                                         
                                       
void key1()
{   
  a=0;                                                                        
        while(1)

        
        {
        if(k1==0)                        //检测按键是否按下
  {
  delay(5);                               //延时消抖
  if(k1==0)                              //再次检测按键是否按下
        {
                while(!k1);               //检测按键是否弹起
    if(a<8)     
                        a++;              //加操作
          }        
        
         

          }
        if(k2==0)                         //检测按键是否按下
        {
                delay(5);                  //延时消抖
                if(k2==0)                 //再次检测按键是否按下
                {
                        while(!k2);          //检测按键是否弹起
                        if(a>0)
                                a--;            //减操作
                }
        }
                              //1234

        P2=smg[a];      //数码管显示
}         

}






void main()
{        
        while(1)
        {
                key1();
                  
        
        }               
}







两个按键控制1-9的循环加减.zip

62.17 KB, 下载次数: 9

最佳答案

查看完整内容

为什么没有从9减到0,而是1? 如果可以减到0,就可以这样: if (a>200) a=9;//这个200的意思是:你的变量设置为unsigned char类型,当a=0时,再减1,就是负,但变量没有负,就是255了,就大于200了。 if (a>9) a=0
回复

使用道具 举报

ID:164602 发表于 2019-4-22 13:12 | 显示全部楼层
Gchang 发表于 2019-4-22 21:34
试了 你的 方法 //加操作 成功了  //减操作 1再减 乱码了

为什么没有从9减到0,而是1?
如果可以减到0,就可以这样:
if (a>200) a=9;//这个200的意思是:你的变量设置为unsigned char类型,当a=0时,再减1,就是负,但变量没有负,就是255了,就大于200了。
if (a>9) a=0
回复

使用道具 举报

ID:509408 发表于 2019-4-22 17:02 | 显示全部楼层

if(++a>9)   a = 1;   //加操作
if(--a<1)     a = 9;   //减操作
回复

使用道具 举报

ID:320663 发表于 2019-4-22 17:14 | 显示全部楼层
if(a<8)       a++;
改成
a++;
if(a>9)a=1
回复

使用道具 举报

ID:517505 发表于 2019-4-22 21:34 | 显示全部楼层
tzs233 发表于 2019-4-22 17:02
if(++a>9)   a = 1;   //加操作
if(--a

试了 你的 方法 //加操作 成功了  //减操作 1再减 乱码了



回复

使用道具 举报

ID:517505 发表于 2019-4-23 15:03 | 显示全部楼层
HC6800-ES-V2.0 发表于 2019-4-23 08:19
为什么没有从9减到0,而是1?
如果可以减到0,就可以这样:
if (a>200) a=9;//这个200的意思是:你的变 ...

这方法可以 存储当前数值 怎么解决 看了 好多EEPROM 的 教程 还是不懂
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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