精华内容
下载资源
问答
  • 51单片机字符传送

    2014-10-07 22:39:34
    51单片机进行字符传送,利用串口进行通信。既发送给电脑,又返回给单片机
  • FontCvt 单片机字符汉字字模提取工具,支持清晰显示,半透明显示,类似ClearType,在单片机上应用可以让中文显示更好看,支持导出C语言文件
  • 单片机字符点阵课程设计报告书.doc
  • 单片机设计的1602字符液晶显示计数,有C语言程序和proteus仿真图,功能实用,技术简便!
  • 单片机是怎样在液晶上显示字符
  • 大家知道strcpy 是子环节复制字符串,可能不知道还有个strncpy,这是复制指定长度的字符串 chardes[]="Hello,iam!"; charsource[]="abcdefg"; strncpy(chardes,charsource,3); 这时chardes的值是abc 注意这里可...
  • 在STM8S003单片机最小系统上,解析串口字符串命令,实现通过字符串命令控制LED指示灯,如“led on”,"led off"来实现LED的亮灭。
  • #关于51单片机字符串 EEPROM存储与读取的问题# 麻烦大佬给看下,按键处理那块有没有问题 在LCD显示的时候字符串的奇数没问题,偶数是随机的。 题目如下 通过串口助手控制 LCD 显示屏,通过 LCD1602 显示并保存在 ...

    #关于51单片机字符串 EEPROM存储与读取的问题#
    题目如下
    <新手小白>
    通过串口助手控制 LCD 显示屏,通过 LCD1602 显示并保存在 EEPROM 中,实现 数据的掉电保存(例 如:串口向单片机发送一串英文字符,该字符在 LCD 上显示出 来,若按下 k1 则实现数据的保存,按下 k2 实 现读取上次保存的数据,显示在 1602 上)

    效果如下
    在这里插入图片描述
    在这里插入图片描述

    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    #include "i2c.h"
    #include <string.h>	
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    sbit LSA=P2^2;
    sbit LSB=P2^3;
    sbit LSC=P2^4;
    
    sbit k1=P3^1;
    sbit k2=P3^0;
    sbit k3=P3^2;	 //定义按键端口
    sbit LCD1602_RS=P2^6;
    sbit LCD1602_RW=P2^5;
    sbit LCD1602_E=P2^7;
    
    u8 num=0;u8 i,flag;
    u8 table[16]="I received is:  ";
    u8 table1[16]="My memory is:   ";
    u8 table2[16];
    u8 table3[16];
    u8 count,rec;
    u8 dat,flag1,j;
    /*******************************************************************************
    * 函 数 名         : delay
    * 函数功能		   : 延时函数,i=1时,大约延时10us
    *******************************************************************************/
    void delay(u16 i)
    {
    	while(i--);	
    }
    
     
    void Lcd1602_Delay1ms(u16 c)   //误差 0us
    {
        u8 a,b;
    	for (; c>0; c--)
    	{
    		 for (b=199;b>0;b--)
    		 {
    		  	for(a=1;a>0;a--);
    		 }      
    	}
        	
    }
    void write_com(u8 com)
    {
    	 	LCD1602_E = 0;     //使能
    		LCD1602_RS = 0;	   //选择发送命令
    		LCD1602_RW = 0;	   //选择写入
    		
    		P0= com;     //放入命令
    		Lcd1602_Delay1ms(1);		//等待数据稳定
    	
    		LCD1602_E = 1;	          //写入时序
    		Lcd1602_Delay1ms(5);	  //保持时间
    		LCD1602_E = 0;
    }
    void write_data(u16 dat)
    {
    	 	LCD1602_E = 1;     //使能
    		LCD1602_RS = 1;	   //选择发送命令
    		LCD1602_RW = 0;	   //选择写入
    		
    		P0=dat;     //放入命令
    		Lcd1602_Delay1ms(1);		//等待数据稳定
    	
    		LCD1602_E = 1;	          //写入时序
    		Lcd1602_Delay1ms(5);	  //保持时间
    		LCD1602_E = 0;
    }
    
     void Init()
    {
    	
    	write_com(0x38);
    	write_com(0x0f);	
    	write_com(0x06);
    	write_com(0x01);  //清屏
    	write_com(0x80);  //设置数据指针起点
    	
    }
    
    /*******************************************************************************
    * 函数名         :Keypros()
    * 函数功能		 :按键处理函数
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    void Keypros()
    {
    
    	if(k1==0)
    	{
    		delay(1000);  //消抖处理
    		if(k1==0)
    		{
    				count=strlen(table2);	//计算要记忆的字符串的长度
    				for(i=0;i<count;i++)
    				{
    					At24c02Write(5*i+2,table2[i]);	  //在对应的地址中放入对应的字符
    					delay(1000);
    				}
    		}
    		while(!k1);
    	}
    
    	if(k2==0)
    	{
    		delay(1000);  //消抖处理
    		if(k2==0)
    		{
    				flag=0;
    				write_com(0x01);
    				for(i=0;i<16;i++)
    				{
    					 write_data(table1[i]);		//显示my memory is:
    				}
    				write_com(0x80+0x40); 			//换行
    				for(i=0;i<16;i++)
    				{
    					table3[i]= At24c02Read(5*i+2);
    					write_data(table3[i]);
    					delay(1000);
    				}
    		}
    		while(!k2);
    	}
    
    
    	if(k3==0)
    	{
    		delay(1000);  //消抖处理
    		if(k3==0)
    		{
    			write_com(0x01);
    		}
    		while(!k3);
    	}		
    }
    
    void UsartInit()
    {
       	SCON = 0x50;
    	TMOD |= 0x20;
    	PCON = 0x80;
    	TH1 = 0xFD;
    	TL1 = 0xFD;
    	EA = 1;
    	ES = 1;
    	TR1 = 1;
    }
    void lcdDisplay()
    {
    	 		write_com(0x01);
    				 for(i=0;i<16;i++)
    			{
    					write_data(table[i]);	
    									
    			}
    			 
    				 write_com(0x80+0x40);
    				  for(i=0;i<num;i++)
    				  {
    				     	write_data(table2[i]);	
    					
    				  }
    				  num=0;
    				  flag=0;
    }
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能		 : 主函数
    * 输    入       : 无
    * 输    出    	 : 无
    *******************************************************************************/
    void main()
    {
    	Init();
    	UsartInit();
    	while(1)
    	{	    				
    			if(flag==1)		
    			{	 
    				lcdDisplay();	
    			} 
    			Keypros();
    	}		
    }
    
    void Usart() interrupt 4
    {
    	if(RI)
    	{
    		table2[num]=SBUF;
    		RI = 0;
    		//Usartdelay5ms();
    		SBUF = table2[num];
    		while(!TI);
    		TI = 0;
    		//Usartdelay5ms();
    		num++;
    		flag = 1;
    		
    	}
    }
    
      
    
    #include"i2c.h"
    
    /*******************************************************************************
    * 函数名         : Delay10us()
    * 函数功能		   : 延时10us
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    
    void Delay10us()
    {
    	unsigned char a,b;
    	for(b=1;b>0;b--)
    		for(a=2;a>0;a--);
    
    }
    /*******************************************************************************
    * 函数名         : I2cStart()
    * 函数功能		 : 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿
    * 输入           : 无
    * 输出         	 : 无
    * 备注           : 起始之后SDA和SCL都为0
    *******************************************************************************/
    
    void I2cStart()
    {
    	SDA=1;
    	Delay10us();
    	SCL=1;
    	Delay10us();//建立时间是SDA保持时间>4.7us
    	SDA=0;
    	Delay10us();//保持时间是>4us
    	SCL=0;			
    	Delay10us();		
    }
    /*******************************************************************************
    * 函数名         : I2cStop()
    * 函数功能		 : 终止信号:在SCL时钟信号高电平期间SDA信号产生一个上升沿
    * 输入           : 无
    * 输出         	 : 无
    * 备注           : 结束之后保持SDA和SCL都为1;表示总线空闲
    *******************************************************************************/
    
    void I2cStop()
    {
    	SDA=0;
    	Delay10us();
    	SCL=1;
    	Delay10us();//建立时间大于4.7us
    	SDA=1;
    	Delay10us();		
    }
    /*******************************************************************************
    * 函数名         : I2cSendByte(unsigned char dat)
    * 函数功能		 : 通过I2C发送一个字节。在SCL时钟信号高电平期间,保持发送信号SDA保持稳定
    * 输入           : num
    * 输出         	 : 0或1。发送成功返回1,发送失败返回0
    * 备注           : 发送完一个字节SCL=0,SDA=1
    *******************************************************************************/
    
    unsigned char I2cSendByte(unsigned char dat)
    {
    	unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。		
    	for(a=0;a<8;a++)//要发送8位,从最高位开始
    	{
    		SDA=dat>>7;	 //起始信号之后SCL=0,所以可以直接改变SDA信号
    		dat=dat<<1;
    		Delay10us();
    		SCL=1;
    		Delay10us();//建立时间>4.7us
    		SCL=0;
    		Delay10us();//时间大于4us		
    	}
    	SDA=1;
    	Delay10us();
    	SCL=1;
    	while(SDA)//等待应答,也就是等待从设备把SDA拉低
    	{
    		b++;
    		if(b>200)	 //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
    		{
    			SCL=0;
    			Delay10us();
    			return 0;
    		}
    	}
    	SCL=0;
    	Delay10us();
     	return 1;		
    }
    /*******************************************************************************
    * 函数名         : I2cReadByte()
    * 函数功能		   : 使用I2c读取一个字节
    * 输入           : 无
    * 输出         	 : dat
    * 备注           : 接收完一个字节SCL=0,SDA=1.
    *******************************************************************************/
    
    unsigned char I2cReadByte()
    {
    	unsigned char a=0,dat=0;
    	SDA=1;			//起始和发送一个字节之后SCL都是0
    	Delay10us();
    	for(a=0;a<8;a++)//接收8个字节
    	{
    		SCL=1;
    		Delay10us();
    		dat<<=1;
    		dat|=SDA;
    		Delay10us();
    		SCL=0;
    		Delay10us();
    	}
    	return dat;		
    }
    
    
    /*******************************************************************************
    * 函数名         : void At24c02Write(unsigned char addr,unsigned char dat)
    * 函数功能		   : 往24c02的一个地址写入一个数据
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    
    void At24c02Write(unsigned char addr,unsigned char dat)
    {
    	I2cStart();
    	I2cSendByte(0xa0);//发送写器件地址
    	I2cSendByte(addr);//发送要写入内存地址
    	I2cSendByte(dat);	//发送数据
    	I2cStop();
    }
    /*******************************************************************************
    * 函数名         : unsigned char At24c02Read(unsigned char addr)
    * 函数功能		   : 读取24c02的一个地址的一个数据
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    
    unsigned char At24c02Read(unsigned char addr)
    {
    	unsigned char num;
    	I2cStart();
    	I2cSendByte(0xa0); //发送写器件地址
    	I2cSendByte(addr); //发送要读取的地址
    	I2cStart();
    	I2cSendByte(0xa1); //发送读器件地址
    	num=I2cReadByte(); //读取数据
    	I2cStop();
    	return num;	
    }
    
    
    
    展开全文
  • 常用函数1.sprintf一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 一.常用函数 1.sprintf 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该...


    一.字符串常用函数

    在单片机开发的过程中时常会用到一些与字符串相关的函数,比如需要在oled12864上显示数字,就需要先把整型的变量转化成字符串(uint8_t 100在内存中占一个字节,将100转化为“100”字符串后占四个字节/0也要占一个字节)。
    有时候又需要将字符串转成数字,比如通过网络或者串口助手接收到的数据通常是字符串型的。

    1.字符串转为数字

    在这里插入图片描述

    2.数字转为字符串

    下列函数可以将字符串转换为数字(keil需要把在工程->target选项卡中勾选use micro lib):

    函数名作 用
    atof()将字符串转换为双精度浮点型值
    atoi()将字符串转换为整型值
    atol()将字符串转换为长整型值
    strtod()将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
    strtol()将字符串转换为长整值,并报告不能被转换的所有剩余数字
    strtoul()将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字

    将字符串转换为数字时可能会导致溢出,如果你使用的是strtoul()这样的函数,你就能检查这种溢出错误。请看下例:
    #include <stdio. h>
    #include <stdlib. h>
    #include <limits. h>
    void main(void);
    void main (void)
    {
    char* str = “1234567891011121314151617181920” ;
    unsigned long num;
    char * leftover;
    num = strtoul(str, &leftover, 10);
    printf(“Original string: %s\n”,str);
    printf(“Converted number: %1u\n” , num);
    printf(“Leftover characters: %s\n” , leftover);
    }

    在上例中,要转换的字符串太长,超出了无符号长整型值的取值范围,因此,strtoul()函数将返回ULONG_MAX(4294967295),并使。char leftover指向字符串中导致溢出的那部分字符;同时,strtoul()函数还将全局变量errno赋值为ERANGE,以通知函数的调用者发生了溢出错误。函数strtod()和strtol()处理溢出错误的方式和函数strtoul()完全相同,你可以从编译程序文档中进一步了解这三个函数的有关细节。

    也可以使用自己手动编写的函数

    int StrToInt(char *str) 
    {
      uint8_t siz=strlen(str);
      if(siz<1)
        return 0;
      int8_t flag=1;
      if(str[0]=='-')
        flag=-1;
      uint8_t res=0;
      for(uint8_t i=(str[0]=='+'||str[0]=='-')?1:0;i<siz;i++)
      {
        if(str[i]<'0' || str[i]>'9')
           return 0;
        res=(res<<3)+(res<<1)+(str[i]&0xf);//'0'和'9'低4位刚好是0~9
      }
      return flag*res;
    }
    

    总结

    总结了经常字符串和数字转化常用的函数,其中数字转字符型可以使用sprintf 函数,字符串转数字可以使用上面表格中所列的函数,或者使用自己编写的函数。

    展开全文
  • 本文主要讲了单片机串口接收字符串的相关知识,下面一起来学习下
  • 实现甲单片机发送控制命令字符控制乙单片机,乙单片机根据所接收到的字符完成LED闪烁。(甲单片机负责向外发送控制命令字符“A”、 “B”、 “C”,或者停止发送,乙机根据所接收到的字符完成LED1闪烁、LED2闪烁、双...
  • \ 单片机是怎样在液晶上 显示字符
  • 51单片机串口接收字符

    热门讨论 2010-04-12 16:41:11
    实际有两个程序 一个是接收以某一特定字符开头的字符串 并不接收此特定字符 这个字符只起个标志的作用。 另一个是单纯接收字符串。 所接受的字符串存在一个数组中,程序简洁命了。 所用单片机:STC89C52
  • 单片机向主机发送字符串:单片机按一定的时间间隔向主机发送字符串,发送内容在虚拟终端显示。
  • 51单片机串口接收字符串比较
  • 字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的DM-162液晶模块来介绍它的编程方法,DM-162采用标准的14脚接口,...
  • 本文主要讲了单片机串口接收字符串出错解决方法,下面一起来学习下
  • Protues仿真实例-51单片机-字符液晶1602.rar
  • 这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的DM-162液晶模块来介绍它的编程方法。
  • Json,单片机Json,避免使用动态内存的解析字符串Json函数,供单片机等没有OS和内存管理的芯片使用
  • unsigned int str_to_num(char dig) /–字符串转化为数字–*/ { unsigned int num = 0; while(*dig != ‘\0’) { if(*dig >= ‘0’ && *dig <= ‘9’) { num = num * 10 + (*dig - ‘0’);//(*dig-48)...

    unsigned int str_to_num(char dig) /–字符串转化为数字–*/
    {
    unsigned int num = 0;
    while(*dig != ‘\0’)
    {
    if(*dig >= ‘0’ && *dig <= ‘9’)
    {
    num = num * 10 + (*dig - ‘0’);//(*dig-48)也行
    dig++;
    }
    else
    {
    num = 0;
    break;
    }
    }
    return(num);
    }

    展开全文
  • 单片机回发字符串,单片机回发字符串源码和注释,单片机回发字符串源码和注释,注释详细
  • 51/52单片机向主机发送字符串 仿真图和程序
  • 本文对51单片机串口通信中字符发送进行了总结。
  • 上位机向单片机发送一串字符串,存入一个数组缓冲区RX1_Buffer[COM_RX1_Lenth]中,接下来单片机提取数组缓冲区中的一部分字符串,将该字符串转化为整形数据,接着将整形数据转化为十六进制数通过串口发送给上位机,...
  • 本人学习单片机好久了,此为本人自行制作的lcd的字符显示,有程序,而且Proteus仿真成功,一定有帮助。
  • 基于单片机的手持式字符识别仪研制
  • 单片机视频字符叠加器的研究与设计 需要的可以看看
  • 电子钟基于PIC单片机的编写.。
  • 介紹单片机字符顯示原理。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,949
精华内容 11,579
关键字:

单片机字符是什么