历史上的今天
返回首页

历史上的今天

今天是:2025年02月28日(星期五)

正在发生

2020年02月28日 | STM8等低端单片机打印各种格式数据

2020-02-28 来源:eefocus

#include “stm8l15x.h”

#include “delay.h”

#include “stdarg.h”

#include “stdio.h”


//定义LED与按键接口

#define LED_GPIO_PORT GPIOC

#define LED_GPIO_PINS GPIO_Pin_4

#define KEY_GPIO_PORT GPIOD

#define KEY_GPIO_PINS GPIO_Pin_4


uint8_t HexTable[]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};


void USART1_SendStr(unsigned char *Str)

{

while(*Str!=0)//不为结束

{

USART_SendData8(USART1,*Str); //发送数据

while(!USART_GetFlagStatus (USART1,USART_FLAG_TXE));//等待发送完毕

Str++;//下一个数据

}

}


void USART1_SendHex(unsigned char dat)

{

USART_SendData8(USART1,‘0’);

while(!USART_GetFlagStatus (USART1,USART_FLAG_TXE));//等待发送完毕

USART_SendData8(USART1,‘x’);

while(!USART_GetFlagStatus (USART1,USART_FLAG_TXE));//等待发送完毕

USART_SendData8(USART1,HexTable[dat>>4]);

while(!USART_GetFlagStatus (USART1,USART_FLAG_TXE));//等待发送完毕

USART_SendData8(USART1,HexTable[dat&0x0f]);

while(!USART_GetFlagStatus (USART1,USART_FLAG_TXE));//等待发送完毕

USART_SendData8(USART1,’ ');

while(!USART_GetFlagStatus (USART1,USART_FLAG_TXE));//等待发送完毕

}


/发送串口数据/

void send_uart_data(uint8_t data)

{

while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);

USART_SendData8(USART1,data);

}


/*

功能:将int型数据转为2,8,10,16进制字符串

参数:value — 输入的int整型数

str — 存储转换的字符串

radix — 进制类型选择

注意:8位单片机int字节只占2个字节

*/

char *sky_itoa(int value, char *str, unsigned int radix)

{

char list[] = “0123456789ABCDEF”;

unsigned int tmp_value;

int i = 0, j, k = 0;

if (NULL == str) {

return NULL;

}

if (2 != radix && 8 != radix && 10 != radix && 16 != radix) {

return NULL;

}

if (radix == 10 && value < 0) {

//十进制且为负数

tmp_value = (unsigned int)(0 - value);

str[i++] = ‘-’;

k = 1;

} else {

tmp_value = (unsigned int)value;

}

//数据转换为字符串,逆序存储

do {

str[i ++] = list[tmp_value%radix];

tmp_value /= radix;

} while(tmp_value);

str[i] = ‘’;

//将逆序字符串转换为正序

char tmp;

for (j = k; j < (i+k)/2; j++) {

tmp = str[j];

str[j] = str[i-j-1+k];

str[i-j-1+k] = tmp;

}

return str;

}


/*

功能:将double型数据转为字符串

参数:value — 输入的double浮点数

str — 存储转换的字符串

eps — 保留小数位选择,至少保留一个小数位,至多保留4个小数位

注意:8位单片机int字节只占2个字节

*/

void sky_ftoa(double value, char *str, unsigned int eps)

{

unsigned int integer;

double decimal;

char list[] = “0123456789”;

int i = 0, j, k = 0;

//将整数及小数部分提取出来

if (value < 0) {

decimal = (double)(((int)value) - value);

integer = (unsigned int)(0 - value);

str[i ++] = ‘-’;

k = 1;

} else {

integer = (unsigned int)(value);

decimal = (double)(value - integer);

}

//整数部分数据转换为字符串,逆序存储

do {

str[i ++] = list[integer%10];

integer /= 10;

} while(integer);

str[i] = ‘’;

//将逆序字符串转换为正序

char tmp;

for (j = k; j < (i+k)/2; j++) {

tmp = str[j];

str[j] = str[i-j-1+k];

str[i-j-1+k] = tmp;

}

//处理小数部分

if (eps < 1 || eps > 4) {

eps = 4;

}


//精度问题,防止输入1.2输出1.19等情况

double pp = 0.1;

for (j = 0; j <= eps; j++) {

pp *= 0.1;

}

decimal += pp;

while (eps) {

decimal *= 10;

eps --;

}

int tmp_decimal = (int)decimal;

str[i ++] = ‘.’;

k = i;

//整数部分数据转换为字符串,逆序存储

do {

str[i ++] = list[tmp_decimal%10];

tmp_decimal /= 10;

} while(tmp_decimal);

str[i] = ‘’;

//将逆序字符串转换为正序

for (j = k; j < (i+k)/2; j++) {

tmp = str[j];

str[j] = str[i-j-1+k];

str[i-j-1+k] = tmp;

}

str[i] = ‘’;

}


void mprintf(char * Data, …)

{

const char *s;

int d;

char buf[16];

uint8_t txdata;

va_list ap;

va_start(ap, Data);

while ( * Data != 0 ) {

if ( * Data == 0x5c ) {

switch ( *++Data ) {

case ‘r’:

txdata = 0x0d;

send_uart_data(txdata);

Data ++;

break;

case ‘n’:

txdata = 0x0a;

send_uart_data(txdata);

Data ++;

break;

default:

Data ++;

break;

}

} else if ( * Data == ‘%’) {

switch ( *++Data ) {

case ‘s’:

s = va_arg(ap, const char *);

for ( ; s; s++) {

send_uart_data(((uint8_t *)s));

}

Data++;

break;

case ‘d’:

d = va_arg(ap, int);

sky_itoa(d, buf, 10);

for (s = buf; s; s++) {

send_uart_data(((uint8_t *)s));

}

Data++;

break;

case ‘x’: {

d = va_arg(ap, int);

sky_itoa(d, buf, 16);

for (s = buf; s; s++) {

send_uart_data(((uint8_t *)s));

}

Data++;

break;

}

case ‘f’: {

double num = va_arg(ap, double);

sky_ftoa(num, buf, 4);

for (s = buf; s; s++) {

send_uart_data(((uint8_t )s));

}

Data++;

break;

}

default:

Data++;

break;

}

} else {

send_uart_data(((uint8_t *)Data));

Data++;

}

}

}


int main( void )

{

u16 u16_adc1_value;

CLK_PeripheralClockConfig (CLK_Peripheral_USART1,ENABLE);//开启ADC/USART时钟

CLK_PeripheralClockConfig (CLK_Peripheral_ADC1,ENABLE);//开启ADC/USART时钟

USART_Init(USART1,115200,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx);//USART初始化,9600,8N1

USART_Cmd (USART1,ENABLE);//使能USART


 ADC_Init (ADC1,ADC_ConversionMode_Single,ADC_Resolution_12Bit,ADC_Prescaler_1);//单次转换,12位,ADC转换时钟1分频

 ADC_Cmd(ADC1,ENABLE);//使能ADC1

 ADC_ChannelCmd (ADC1,ADC_Channel_16,ENABLE);//使能通道11------PB2

 

 while(1)

 {

       //USART1_SendStr("ADC转换结果为: ");

     ADC_SoftwareStartConv (ADC1);//开始ADC软件转换

     while(!ADC_GetFlagStatus (ADC1,ADC_FLAG_EOC));//等待转换结束

     ADC_ClearFlag (ADC1,ADC_FLAG_EOC);//清除对应标志

     

     u16_adc1_value=ADC_GetConversionValue (ADC1);//获取转换值

     

     // USART1_SendHex((u16_adc1_value>>8));

     //USART1_SendHex((u16_adc1_value&0xff));

     //USART_SendData9(USART1, u16_adc1_value);

     mprintf("%drn",u16_adc1_value );

     

    /*mprintf("STM8L start...rn");

    mprintf("%f %f %frn", 1.2, 12.36, -1.2364568);

    mprintf("%x %x %xrn", 0x1035, 0x0830, 0x2018);

    mprintf("%d %d %drn", 12, -12345, 2);

    mprintf("STM8L end...rn");*/


     delay_10us(100);

     

 }

}

推荐阅读

史海拾趣

CST Master Electronic Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,CST Master决定进军国际市场。然而,国际市场的竞争更加激烈,法律法规和文化差异也给公司带来了不小的挑战。公司积极调整市场策略,加强与当地合作伙伴的合作,逐步打开了国际市场的大门。通过不断的努力,CST Master在国际市场上也取得了一定的份额。

百佳(BAIJIA)公司的发展小趣事

随着国内市场的逐渐饱和,百佳公司开始将目光投向国际市场。他们积极参与国际展览和交流活动,与国际同行建立广泛的合作关系。通过拓展国际市场,百佳公司的产品不仅赢得了更多海外客户的青睐,也为企业带来了更广阔的发展空间。

Federal Custom Cable公司的发展小趣事

Federal Custom Cable公司成立于XXXX年,由几位具有丰富电缆制造经验的工程师创立。公司创立之初,就专注于为客户提供定制化的电缆解决方案。他们深入了解不同行业对电缆的特殊需求,通过技术创新和工艺改进,生产出符合客户要求的电缆产品。这种对定制化需求的精准把握,使Federal Custom Cable在竞争激烈的电缆市场中脱颖而出。

艾为(AWINIC)公司的发展小趣事

2015年7月,艾为电子成功挂牌新三板,迈入了资本市场的新征程。上市以来,艾为电子充分利用资本市场的优势,加快了技术研发和市场拓展的步伐。同时,公司还积极寻求与国内外优秀企业的合作机会,通过引入战略投资者和开展资本运作,为公司的未来发展注入了新的动力。

这五个故事从不同角度展现了艾为电子在电子行业中的发展历程和成就,体现了公司不断追求卓越、创新发展的精神风貌。随着科技的不断进步和市场的不断变化,相信艾为电子将继续保持其竞争优势,为电子行业的发展贡献更多力量。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着市场需求的不断增长,Galaxy Microelectronics意识到需要不断迭代技术和扩大产能。

发展:2010年,公司成功研发出3D V-NAND技术,这一技术革命性地提高了存储密度和性能,降低了功耗。同时,公司开始在全球范围内建设新的生产基地,以满足日益增长的市场需求。通过技术迭代和产能扩张,Galaxy Microelectronics逐渐成为了全球闪存市场的领军企业之一。

ADTech公司的发展小趣事

随着企业规模的扩大和影响力的提升,AdTech公司开始更加关注自身的社会责任和可持续发展。公司积极参与公益活动,支持教育、环保等事业,为社会的发展做出了积极贡献。同时,公司还注重环境保护和资源利用,通过采用环保材料和节能技术,降低生产过程中的能耗和排放。这些举措不仅提升了公司的社会形象,也为其实现长期可持续发展奠定了坚实基础。

这些故事是基于对AdTech公司可能发展路径的假设和推测而创作的,并不代表该公司的实际发展情况。实际上,每个公司的发展都是独特而复杂的,受到多种因素的影响。如需了解更多关于AdTech公司的真实发展情况,建议查阅相关新闻报道、行业报告或公司年报等权威资料。

问答坊 | AI 解惑

MCS51之裸奔框架C++程序源码(菜农C++裸奔大法系列之三)

/*------------------------------------------------------------------------                   MCS51之裸奔框架C++程序源码(菜农C++裸奔大法) 本程序主要表现了C++多文件系统的 ...…

查看全部问答>

楼宇对讲可视对讲系统

可视对讲系统对于家居门户管理的最大特点是安全、便捷。在室内通过可视对讲器或对讲器对来访者进行识别,既可免除烦扰,又可简化开门 程序,是房屋的理想设施。   智能楼宇对讲系统是集微电子技术、计算机技术、通讯技术、多媒体技术为一体的 ...…

查看全部问答>

关于伟福的一个错误

ORG 0000H      SJMP MAIN MAIN:MOV P1,#FFH XIAO:MOV P3.0,#0B      JB P1.0,REL      SETB P1.4      ACALL DE05      CLR P1.4 ...…

查看全部问答>

找兼职 多普达手机发短信和接受短信息,服务器接受并解析和向pda发短信息

找兼职 多普达手机发短信和接受短信息,服务器接受并解析和向pda发短信息,pda操作系统是wm ,服务器操作系统xp,是要求有成功案例或项目经验。 联系 msn djliu221@163.com qq 412925762 谢绝新手…

查看全部问答>

核心板不能从NOR启动UBOOT

我刚购买的核心板不能从NOR启动,NOR里已经烧写了UBOOT,在开发板上能从NOR正常启动,我的板子和开发板地板复位电路和JTAG电路都一样,在我板子上也不能用h-jtag烧写NOR flash,我的板子电源正常,能从NAND启动EBOOT,请帮忙分析一下 原因,谢谢先~…

查看全部问答>

定制应用程序shell

如何定制应用程序shell 我想在系统启动时候直接就是我的应用程序画面,请问如何实现? 我是这么做的: [HKEY_LOCAL_MACHINE\\init] ; @CESYSGEN IF CE_MODULES_SHELL         \"Launch10\"=\"shell.exe\" ; @C ...…

查看全部问答>

串口通讯自发自收

你们好。我做了一个AT89S52;MAX232与PC通讯板子。 当我用11。12与单片机相连,13。14,GND与PC相连, 线路也对。能接收到单片机发到PC的数据。就是当我用调试助手发数据到单片机时。 调试助手一边发,它自已一边收,好像单片机没有还收不到 ...…

查看全部问答>

CroundButton

刚刚看了个CroundButton类,注释不够清楚,图像处理的函数一点都没头绪 在这里个大家贴出来,有心人给我理理来龙去脉哈   ____________________________________________________________________________________________________ ______ ...…

查看全部问答>

高手们帮帮忙!关于坐标变换的方程组

带下划线的是已知量,a b w是未知量,高手们帮我解出 a= b= w= 的表达式吗?谢谢各位了!…

查看全部问答>

2600A系列数字源表的内置扫描生成能力支持更快的吞吐量和精密定时控制

设置正常运行时间是为在进行扫描之前配置SMU源和测量[1]参数。因此,设置间隔只需要一次。从那以后,根据用户需要,扫描可以运行多次。在这个测试中,2636型数字源表[2]被配置为在很短的积分时间内(NPLC = 0.001)进行测量,但默认源和测量延迟则 ...…

查看全部问答>