string与char一起出现显示不全

char[] cha = new char[4] ;
            for (int i = 0; i < 4; i++)
            {
                cha[i] = tbInput.Text[i];
            }
            String str1 = new String(cha);
            string str2 = tbChange.Text;


           // str1 = "被赋值";
            labShowA.Text = "A为:" + str1 + "   B为:" + str2;
当不执行注释部分时,labShowA.Text显示只有str1,
而执行注释部分时,labShowA.Text显示全部。
好的,这个单片机程序可以分为以下几个部分: 1. 初始化:包括引脚配置、定时器配置、串口配置等。 2. 超声波测距模块的配置:通过定时器和IO口,发出一定频率的超声波脉冲,然后接收回波并计算距离。 3. LEDO显示屏的配置:通过IO口控制LEDO显示屏的亮灭和显示内容,可以显示距离和其他信息。 4. 万年历模块的配置:通过计算机内部时钟和日期寄存器,实现万年历功能,可以显示当前的日期和时间。 下面是一个简单的程序框架,可以根据具体的硬件和需求进行修改: ```c #include <reg52.h> #define TRIG P1_0 // 超声波发射引脚 #define ECHO P1_1 // 超声波接收引脚 #define LEDO P2 // LEDO显示屏引脚 #define RTC_ADDR 0xD0 // 万年历模块地址 void init(); void ultrasonic(); void display(int distance); void calendar(); void main() { init(); while (1) { ultrasonic(); display(distance); calendar(); } } void init() { // 引脚配置 P1M0 = 0x01; // P1_0为推挽输出 P1M1 = 0x00; P1M0 = 0x00; // P1_1为开漏输入 P1M1 = 0x01; P2M0 = 0x00; // P2为推挽输出 P2M1 = 0x00; // 定时器配置 TMOD = 0x10; // 定时器1为模式1 TH1 = 0xFD; // 波特率为9600 TL1 = 0xFD; TR1 = 1; // 启动定时器1 // 串口配置 SCON = 0x50; // 串口模式1 ES = 1; // 开启串口中断 EA = 1; // 开启总中断 } void ultrasonic() { // 发送超声波 TRIG = 1; delay_us(10); TRIG = 0; // 接收回波 while (!ECHO); // 等待高电平 TH0 = 0; TL0 = 0; TR0 = 1; // 启动定时器0 while (ECHO); // 等待低电平 TR0 = 0; // 停止定时器0 distance = TH0 * 256 + TL0; // 计算距离 distance = distance / 58; // 转换为厘米 } void display(int distance) { // 在LEDO上显示距离 LEDO = 0xFF; // 全亮 delay_ms(500); LEDO = 0x00; // 全灭 delay_ms(500); if (distance < 10) { LEDO = 0x01; // 仅第一位亮 } else if (distance < 100) { LEDO = 0x03; // 前两位亮 } else if (distance < 1000) { LEDO = 0x07; // 前三位亮 } else { LEDO = 0x0F; // 四位都亮 } delay_ms(500); } void calendar() { // 获取当前时间 unsigned char year, month, day, hour, minute, second; I2C_Start(); I2C_SendByte(RTC_ADDR); I2C_SendByte(0x00); I2C_Start(); I2C_SendByte(RTC_ADDR + 1); second = I2C_ReadByte(); minute = I2C_ReadByte(); hour = I2C_ReadByte(); day = I2C_ReadByte(); month = I2C_ReadByte(); year = I2C_ReadByte(); I2C_Stop(); // 在LEDO上显示日期和时间 LEDO = 0x10; // 第一位亮表示日期 LEDO = month / 10 << 4 | month % 10; // 显示月份 delay_ms(500); LEDO = day / 10 << 4 | day % 10; // 显示日期 delay_ms(500); LEDO = 0x20; // 第二位亮表示时间 LEDO = hour / 10 << 4 | hour % 10; // 显示小时 delay_ms(500); LEDO = minute / 10 << 4 | minute % 10; // 显示分钟 delay_ms(500); } void delay_us(unsigned int n) { while (n--) { _nop_(); _nop_(); _nop_(); _nop_(); } } void delay_ms(unsigned int n) { while (n--) { delay_us(1000); } } void I2C_Start() { SDA = 1; SCL = 1; delay_us(5); SDA = 0; delay_us(5); SCL = 0; } void I2C_Stop() { SDA = 0; SCL = 1; delay_us(5); SDA = 1; delay_us(5); } void I2C_SendByte(unsigned char dat) { unsigned char i; for (i = 0; i < 8; i++) { SDA = dat & 0x80; SCL = 1; delay_us(5); SCL = 0; dat <<= 1; } SDA = 1; SCL = 1; delay_us(5); SCL = 0; } unsigned char I2C_ReadByte() { unsigned char i, dat = 0; SDA = 1; for (i = 0; i < 8; i++) { SCL = 1; delay_us(5); dat = dat << 1 | SDA; SCL = 0; delay_us(5); } return dat; } void UART_SendByte(unsigned char dat) { SBUF = dat; while (!TI); TI = 0; } void UART_SendString(unsigned char *str) { while (*str) { UART_SendByte(*str++); } } void UART_ISR() interrupt 4 { if (RI) { unsigned char dat = SBUF; // 处理串口接收到的数据 RI = 0; } if (TI) { // 处理串口发送完成的中断 TI = 0; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值