[代码解读]独立按键控制LED位移c51单片机

先看效果8846abc1502244c78fc89e01424d0864.gif

 代码解读:

6f99a8018e704a14af931343918444cb.png

c93e27c171234bba8c83c3cccedd1c45.png 

 关于独立按键这里注意:

(这两个独立按键的针脚刚好是反的)

9f5ebef58dd444e892fbb7514ec7f6e6.png

08a6af6709284c2e9600d5be124f3250.png 

 最后附上代码:

#include <REGX52.H>

void Delay(unsigned int xms);  

unsigned char LEDNum;

 

void main()

{

 P2=~0x01;

 while(1)

 {

  if(P3_1==0)

  {

  Delay(20);

  while(P3_1==0);

  Delay(20);

  LEDNum++;

  if(LEDNum>=8)

   {

    LEDNum=0;

   }

  P2=~(0x01<<LEDNum);

  }

  if(P3_0==0)

  {

  Delay(20);

  while(P3_0==0);

  Delay(20);

  

  if(LEDNum==0)

   LEDNum=7;

  else

   LEDNum--;

   

  P2=~(0x01<<LEDNum);

  }

 }

}

void Delay( unsigned int xms)

{

 unsigned char i, j;

 while(xms)

 { 

  i = 2;

  j = 239;

  do

  {

   while (--j);

  } while (--i);

  xms--;

 }

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. 变量定义及关系如下: - x, y 是无符号 8 位整数,分别赋值为 134 和 246。 - m, n 是有符号 8 位整数,分别赋值为 x 和 y。 - z1 是无符号 8 位整数,其值为 x 减去 y 的差。 - z2 是无符号 8 位整数,其值为 x 加上 y 的和。 - k1 是有符号 8 位整数,其值为 m 减去 n 的差。 - k2 是有符号 8 位整数,其值为 m 加上 n 的和。 实现整数加减法的原理是:对于无符号整数,直接进行加减运算即可;对于有符号整数,先将其转换为补码形式,然后进行加减运算,最后再将结果转换回原码形式。 验证如下: ```python # 无符号整数加减法 x = 134 y = 246 z1 = x - y z2 = x + y print(f"z1 = {z1}, z2 = {z2}") # 有符号整数加减法 m = x n = y if m > 127: m -= 256 if n > 127: n -= 256 k1 = m - n k2 = m + n if k1 < -128: k1 += 256 if k2 > 127: k2 -= 256 print(f"k1 = {k1}, k2 = {k2}") ``` 输出结果为: ``` z1 = 144, z2 = 124 k1 = -112, k2 = -120 ``` 可以发现,无符号整数加减法的结果与预期一致,有符号整数加减法的结果也与预期一致。 2. 无符号整数加法判断溢出的程序: ```python def unsigned_add_overflow(a, b): if a + b < a or a + b < b: return True else: return False # 测试 a = 255 b = 1 print(unsigned_add_overflow(a, b)) # True ``` 这里采用了一种简单的判断方法,即判断 a+b 是否小于 a 或小于 b,如果成立,则说明发生了溢出。 3. 带符号整数加法判断溢出的程序: ```python def signed_add_overflow(a, b): if a > 0 and b > 0 and a + b < 0: return True elif a < 0 and b < 0 and a + b >= 0: return True else: return False # 测试 a = 127 b = 1 print(signed_add_overflow(a, b)) # True ``` 这里分别判断了 a 和 b 均为正数、均为负数以及符号不同的情况,如果发生了溢出,则返回 True。 4. 带符号整数减法判断溢出的程序: ```python def signed_sub_overflow(a, b): if a > 0 and b < 0 and a - b < 0: return True elif a < 0 and b > 0 and a - b >= 0: return True else: return False # 测试 a = 127 b = -128 print(signed_sub_overflow(a, b)) # True ``` 这里分别判断了 a 为正数、b 为负数以及 a 为负数、b 为正数的情况,如果发生了溢出,则返回 True。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值