P1100 高低位交换

​ 题目链接

开始写的代码:

#include<iostream>
#include<cstdio>
using namespace std;
long long x,ans,t=1;
int a[33],n;
int main()
{
  scanf("%lld",&x);
  while(x>0)
  {
    n++;
    a[n]=x%2;
    x/=2;
  }
  for(int i=1;i<=n;i++)
    swap(a[i],a[n-i+1]);
  for(int i=1;i<=16;i++)
    swap(a[i],a[i+16]);
  for(int i=1;i<=32;i++)
    ans=t*a[i],t*=2;
  printf("%lld",ans);
  return 0;
}

结果10分。

之后看题解学结构体。好家伙这么简单!!!!!!

#include<bits/stdc++.h>
using namespace std;
int main(){
	unsigned int n;
	cin>>n;
	cout<<(n>>16)+(n<<16);
	return 0;
}

好的,下面是修改后的汇编代码,实现了将电压值通过1602LCD显示,精确到小数点后一。 ``` ORG 0000H ; 程序入口地址 MOV P1, #0FFH ; 设置P1口为输入 MOV P2, #0H ; 设置P2口为输出 START: ACALL READ_ADC ; 调用AD转换函数 ACALL DISPLAY_LCD ; 调用LCD显示函数 SJMP START ; 循环执行 READ_ADC: MOV A, #0 ; 清零A寄存器 MOV P3.0, #1 ; 选择Ch0通道 ACALL DELAY ; 延时等待稳定 SETB P3.5 ; 启动转换 ACALL DELAY ; 延时等待转换完成 CLR P3.5 ; 停止转换 MOV A, P1 ; 读取转换结果 MOV A, #0FFH ; 设置高为1 ANL A, P1 ; 取低8 RET ; 返回 DISPLAY_LCD: MOV A, #0 ; 清零A寄存器 MOV P3.0, #1 ; 选择Ch0通道 ACALL DELAY ; 延时等待稳定 SETB P3.5 ; 启动转换 ACALL DELAY ; 延时等待转换完成 CLR P3.5 ; 停止转换 MOV A, P1 ; 读取转换结果 MOV A, #0FFH ; 设置高为1 ANL A, P1 ; 取低8 MOV R0, A ; 存储电压值 MOV A, #0 ; 清零A寄存器 MOV P2.0, #0 ; RS=0 MOV P2.1, #0 ; RW=0 MOV P2.2, #1 ; E=1 ACALL DELAY ; 延时等待 MOV P0, #0F0H ; 设置高4数据线 ORL P0, R0 ; 设置低4数据线 MOV P2.2, #0 ; E=0 ACALL DELAY ; 延时等待 MOV P2.2, #1 ; E=1 ACALL DELAY ; 延时等待 MOV P0, #0F0H ; 设置高4数据线 ORL P0, R0 ; 设置低4数据线 MOV P2.2, #0 ; E=0 ACALL DELAY ; 延时等待 MOV A, R0 ; 将电压值存储到A寄存器中 MOV P2.0, #1 ; RS=1 MOV P2.1, #0 ; RW=0 MOV P2.2, #1 ; E=1 ACALL DELAY ; 延时等待 MOV P0, #0F0H ; 设置高4数据线 ANL A, #0F0H ; 取高4 SWAP A ; 交换高低4 ORL P0, A ; 设置低4数据线 MOV P2.2, #0 ; E=0 ACALL DELAY ; 延时等待 MOV P2.2, #1 ; E=1 ACALL DELAY ; 延时等待 MOV P0, #0F0H ; 设置高4数据线 MOV A, R0 ; 将电压值存储到A寄存器中 ANL A, #0FH ; 取低4 ORL P0, A ; 设置低4数据线 MOV P2.2, #0 ; E=0 ACALL DELAY ; 延时等待 RET ; 返回 DELAY: MOV R2, #250 ; 设置循环计数器 MOV R3, #255 ; 设置循环计数器 DJNZ R2, $ ; 循环等待 DJNZ R3, $ ; 循环等待 RET ; 返回 ``` 这段代码的主要修改是在DISPLAY_LCD函数中,我们使用了1602LCD的命令和数据传输方式来实现数值的显示。首先使用AD转换函数读取电压值,然后将电压值存储到R0寄存器中。接着使用LCD的命令传输方式,将电压值显示在LCD上。 其中,我们将电压值存储在A寄存器中,先向LCD发送高4数据,然后发送低4数据。由于电压值是8的,需要将高4和低4分别发送。在发送低4数据之前,需要将高低4交换一下,以确保数码管上显示的数值正确。最后使用DELAY函数进行延时,以确保LCD显示稳定。 这样,就实现了将电压值通过1602LCD实时显示,并且精确到小数点后一的功能。请注意,由于单片机的AD转换精度有限,此程序只能实现到小数点后一的精度,如果需要更高的精度,需要使用更高精度的AD转换电路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值