串口调试助手上输入数据,然后再数码管显示(C语言版本)

//串口调试助手上输入数据,然后再数码管显示
#include <reg52.h>
#include "uart.h"
 

//数码管从0-F
uint8 number[]={0x0c0,0x0F9,0x0A4,0x0B0,
    0x99,0x92,0x82,0xF8,
    0x80,0x90,0x88,0x83,
    0xC6,0xA1,0x86,0x8E};
uint16 n,m,num=0;
void UART_init()
{

 TMOD = 0x20;   //0010 0000   说明在定时器1的工作方式2下工作
 TH1  = 0xFD;
 TL1  = 0xFD;

 TR1  = 1;    //定时器1运行控制位=1,说明开始计时
 SCON = 0x50;   //0101 0000   前两位说明在串口工作方式1  第三位SM2在方式1设置为0  第四位REN=1允许串口接收
 ES=1;
 EA=1;
}

main()
{
 P0 = 0xFF;  // led初始化
 
 ENLED1 = 0;
 ENLED2 = 1; //3/8译码器使能

 ADDR2 = 0;
 ADDR1 = 0;
 ADDR0 = 0; //选中第一个数码管


    UART_init();

 while (1);
}

void uart_interrupt() interrupt 4
{
    if(TI==1)
  {
    TI=0;
    REN=1;
  }
  if(RI==1)
  {
    RI=0;
    num=SBUF;
    if(num>=48&&num<=57)
              P0=number[num%16];
    else if((num>=65&&num<=70)|| (num>=97&&num<=102))
         {
       P0=number[9+num%16]; 
   }
  else P0=0xFF;
    SBUF=num;
    REN=0;
  }
}

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的C51通过串口调试助手控制数码管显示数字和蜂鸣器的完整代码: ``` #include <reg52.h> #include <stdio.h> sbit buzzer = P1^0; // 蜂鸣器连接的引脚 /* 数码管连接的引脚 a f b g e c d dp */ sbit seg_a = P0^0; sbit seg_b = P0^1; sbit seg_c = P0^2; sbit seg_d = P0^3; sbit seg_e = P0^4; sbit seg_f = P0^5; sbit seg_g = P0^6; sbit seg_dp = P0^7; unsigned char code SEG_TAB[] = { // 数码管段码表 0xc0, // '0' 0xf9, // '1' 0xa4, // '2' 0xb0, // '3' 0x99, // '4' 0x92, // '5' 0x82, // '6' 0xf8, // '7' 0x80, // '8' 0x90 // '9' }; void initUART() { TMOD = 0x20; // 设置定时器1为模式2 TH1 = 0xfd; // 波特率设置为9600 TL1 = 0xfd; TR1 = 1; // 启动定时器1 SCON = 0x50; // 串口工作在模式1 ES = 1; // 开启串口中断 EA = 1; // 开启总中断 } void UART_ISR() interrupt 4 { if (RI) { // 判断是否接收到数据 RI = 0; // 清除接收中断标志位 unsigned char data = SBUF; // 读取接收到的数据 if (data >= '0' && data <= '9') { // 如果接收到的数据为数字字符 P2 = SEG_TAB[data - '0']; // 在数码管上显示对应数字 } if (data == 'B' || data == 'b') { // 如果接收到的数据为'B'或'b' buzzer = 1; // 打开蜂鸣器 } if (data == 'C' || data == 'c') { // 如果接收到的数据为'C'或'c' buzzer = 0; // 关闭蜂鸣器 } } } void main() { initUART(); // 初始化串口模块 P0 = 0xff; // 关闭数码管 while (1) {} } ``` 在这个示例代码中,我们使用了定时器1来控制串口的波特率,使用了中断来处理串口数据的接收。当接收到的数据为数字字符时,我们会在数码管上显示对应的数字;当接收到的数据为'B'或'b'时,我们会打开蜂鸣器;当接收到的数据为'C'或'c'时,我们会关闭蜂鸣器。在程序的主循环中,我们只是一直等待串口数据的接收,因此程序不会退出。 请注意,这个示例代码只是一个非常简单的示例,实际的应用程序可能需要更完善的错误检测和容错机制。同时,硬件的具体实现也会对代码产生影响,因此在实际应用中可能需要根据具体硬件进行一些调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值