111111

  1. // t4.cpp : Defines the entry point for the console application.   
  2. //   
  3.   
  4. #include "stdafx.h"   
  5.   
  6. #include <string>   
  7. #include <iostream>   
  8. #include <cctype>   
  9. #include <algorithm>   
  10.   
  11. /* 
  12. 入口参数:pSrc  源十六进制数据 
  13. 出口参数:dest  存放运算结果 
  14.     返回:true  转换成功 
  15.           false 失败 
  16. */  
  17. bool Hex2String(unsigned char *pSrc,std::string &dest,int nL)  
  18. {  
  19.     char buf[256];  
  20.       
  21.     memset((char *)buf,0,sizeof(buf));  
  22.   
  23.     unsigned char hb;  
  24.     unsigned char lb;  
  25.   
  26.     for(int i=0;i<nL;i++)  
  27.     {  
  28.         hb=(pSrc[i]&0xf0)>>4;  
  29.   
  30.         if( hb>=0 && hb<=9 )  
  31.             hb += 0x30;  
  32.         else if( hb>=10 &&hb <=15 )  
  33.             hb = hb -10 + 'A';  
  34.         else  
  35.             return false;  
  36.   
  37.         lb = pSrc[i]&0x0f;  
  38.         if( lb>=0 && lb<=9 )  
  39.             lb += 0x30;  
  40.         else if( lb>=10 && lb<=15 )  
  41.             lb = lb - 10 + 'A';  
  42.         else  
  43.             return false;  
  44.   
  45.         buf[i*2]   = hb;  
  46.         buf[i*2+1] = lb;  
  47.     }  
  48.     dest = buf;  
  49.     return true;  
  50. }  
  51.   
  52. /* 
  53. 入口参数:src  源字符串 
  54. 出口参数:dest  存放运算结果 
  55.     返回:true  转换成功 
  56.           false 失败 
  57. */  
  58. bool String2Hex(std::string &src,unsigned char *dest)  
  59. {  
  60.     unsigned char hb;  
  61.     unsigned char lb;  
  62.   
  63.     if(src.size()%2!=0)  
  64.         return false;  
  65.   
  66.     transform(src.begin(), src.end(), src.begin(), toupper);  
  67.   
  68.     for(int i=0, j=0;i<src.size();i++)  
  69.     {  
  70.         hb=src[i];  
  71.         if( hb>='A' && hb<='F' )  
  72.             hb = hb - 'A' + 10;  
  73.         else if( hb>='0' && hb<='9' )  
  74.             hb = hb - '0';  
  75.         else  
  76.             return false;  
  77.   
  78.         i++;  
  79.         lb=src[i];  
  80.         if( lb>='A' && lb<='F' )  
  81.             lb = lb - 'A' + 10;  
  82.         else if( lb>='0' && lb<='9' )  
  83.             lb = lb - '0';  
  84.         else  
  85.             return false;  
  86.   
  87.         dest[j++]=(hb<<4)|(lb);  
  88.     }  
  89.     return true;  
  90. }  
  91.   
  92. //下面是使用举例,在VisualStudio2008+SP1中调试通过   
  93. int _tmain(int argc, _TCHAR* argv[])  
  94. {  
  95.     unsigned char srcB[]={0x12,0x34,0x56,0x78,0x90,0xab,0xbc,0xcd,0xde,0xef};  
  96.   
  97.     std::string strDest;  
  98.   
  99.     Hex2String(srcB,strDest,sizeof(srcB));  
  100.     std::cout<<"HexToString:"<<strDest<<std::endl;  
  101.   
  102.     if(String2Hex(strDest,srcB))  
  103.         std::cout<<"StringToHex:Success!"<<std::endl;  
  104.     else  
  105.         std::cout<<"StringToHex:Failed!"<<std::endl;  
  106.   
  107.     return 0;  
  108. }  
### 51单片机实现数码管显示特定数字 要在51单片机上实现数码管显示特定数字(如`111111`),可以采用动态扫描的方式,因为这种方式能够节省I/O端口资源并提高程序效率。以下是具体的解决方案: #### 模型搭建 在Proteus中构建电路模型时,需注意以下几点: - 使用8位I/O接口连接到数码管的段选线(a-g以及dp)。 - 另外使用4根I/O线作为位选信号,用于控制四个独立的数码管依次点亮。 此部分可参考动态数码管显示的相关资料[^2]。 #### 代码实现 ##### 1. 数码管刷新功能 为了使多个数码管同时显示不同的数字,需要利用动态扫描技术。即快速轮流点亮各个数码管,在视觉上形成同时亮起的效果。 ```c #include<reg51.h> sbit D1=P2^0; sbit D2=P2^1; sbit D3=P2^2; sbit D4=P2^3; unsigned char code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int i){ unsigned int j,k; for(j=0;j<i;j++) for(k=0;k<1275;k++); } void display(){ static unsigned char num[4]={0x01,0x01,0x01,0x01}; P0=table[num[0]]; D1=0;D2=1;D3=1;D4=1; delay(5); P0=table[num[1]]; D1=1;D2=0;D3=1;D4=1; delay(5); P0=table[num[2]]; D1=1;D2=1;D3=0;D4=1; delay(5); P0=table[num[3]]; D1=1;D2=1;D3=1;D4=0; delay(5); } ``` 上述代码实现了动态扫描机制,其中数组 `num` 存储要显示的数据,这里设置为全部显示‘1’[^4]。 ##### 2. 小数分解函数 如果涉及浮点数处理,则需要编写专门的小数分离逻辑。不过当前需求仅限于整数展示,因此无需额外定义此类辅助方法[^1]。 #### 测试用例 测试阶段应验证不同输入条件下系统的响应情况,比如最大值、最小值边界条件下的表现如何等等。 #### 仿真结果 完成硬件连线之后运行软件模拟环境中的项目文件,观察虚拟仪器上的实际效果是否满足预期目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值