⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 output.c

📁 这是《Keil Cx51 V7.0单片机高级语言编程与uVision2应用实践》教材各章中列出的全部程序例子。
💻 C
字号:
/*****************************************************************************
*  功能描述: 将A/D转换结果送往80C552的 UART 
*****************************************************************************/
#include <reg552.h>
char code string_0[] =	   "Conversion #";
char code string_1[] =	   ": (Ref is 5.12V)";
char code string_2[] =	   "ADC_Channel #";
char code string_3[] =	   "mV";
char code string_4[] =	   ": ";
char code new_line[] =	   "\r\n";

/****************************************************************************
*  函数原型	      : void send_byte(char src_byte);
*  功    能	      : 将一个字节的数据送往UART并等待传送结束。 
*****************************************************************************/
void send_byte(char src_byte) {
   S0BUF=src_byte;		/* 装入传送字节 */
   while(TI==0);		/* 等待传送结束 */
   TI=0;			/* 清除传送标志 */
 }

/****************************************************************************
*  函数原型	      : void decode(char src_nibble);
*  功    能	      : 将数据转换成ASCII码并传送。 
*****************************************************************************/
void decode(char src_nibble) {
   if (src_nibble<0x0a)
      send_byte(src_nibble+0x30);
   else
      send_byte(src_nibble+0x41-0x0a);
 }

/****************************************************************************
*  函数原型	      : void send_bin_byte(char src_byte)
*  功    能	      : 分离出数据中的一个字节, 将其转换成ASCII码并传送。
*****************************************************************************/
void send_bin_byte(char src_byte) {
   decode((src_byte>>4) & 0x0f);   
   decode(src_byte & 0x0f);	   
 }

/****************************************************************************
*  函数原型	      : void send_dec_int(unsigned int src_wrd)
*  功    能	      : 将二进制整数转换成十进制整数并传送。 
*****************************************************************************/
void send_dec_int(unsigned int src_wrd) {
   unsigned char a,b,c,d,e;
   a=src_wrd/1000;		   /* a=千位 */
   b=((src_wrd%1000)/100);	   /* b=百位 */
   c=((src_wrd%100)/10);	   /* c=十位 */
   d=src_wrd%10;		   /* d=个位 */
   e=16*c+d;			  
   if (a==0) {
       send_byte(0x20);
       if (b==0) {
	       send_byte(0x20);
	      if (c==0) {
	          send_byte(0x20);
	          decode(d);
	      }
	      else
	          send_bin_byte(e);
       }
       else {
	     decode(b);
	     send_bin_byte(e);
       }
  }
  else {
	send_bin_byte((16*a)+b);
	send_bin_byte(e);
  }
 }

/****************************************************************************
*  函数原型	      : void send_string(char code *str_ptr)
*  功    能	      : 取出ROM中的字符串并传送。 
*****************************************************************************/
void send_string(char code * str_ptr) {
   while (*str_ptr !=0)
     send_byte(*(str_ptr++));	 /* 发送字节 */
 }

/****************************************************************************
*  函数原型	      : void write_UART(unsigned int *ADC_result,
*			                unsigned int conversion_cnt);
*  功    能	      : 将结果转换成正确的格式并送往UART。 
*****************************************************************************/
void write_UART(unsigned int *result_ptr, unsigned int conversion_cnt) {
   unsigned char cnt;

   send_string(new_line);
   send_string(new_line);
   send_string(string_0);	    /* 发送信息号 */
   send_dec_int(conversion_cnt);
   send_string(string_1);
   for (cnt=0;cnt<8;cnt++) {
    send_string(new_line);
    send_string(string_2);	    /* 发送通道号 */
    decode(cnt);
    send_string(string_4);
    send_dec_int(*(result_ptr++));  /* 发送结果 */
    send_string(string_3);
   }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -