1个共阳数码管显示变化数字

/*-----------------------------------------------

  内容:通过循环赋值给P1,让数码管显示特定的字符或者数字
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

unsigned char code dofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};
 // 显示数值表0-9

void Delay(unsigned int t); //函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  
unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255

while (1)         //主循环
  {
 for(i=0;i<10;i++)   //加入 for循环,表明for循环大括号中的程序循环执行10次
  {
  P1=dofly_table[i]; //循环调用表中的数值
  Delay(60000);      //延时,方便观看数字变化
  }

                     //主循环中添加其他需要一直工作的程序
  }
}/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
 while(--t);
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,根据您的问题,我理解您想要通过PIC的串口发送一个数字,并将其显示在四位共阳数码管上。为了实现这个目的,您需要完成以下步骤: 1. 在PIC中编写串口通讯代码,将数字发送到数码管控制器。 2. 配置RD口为输出模式,将四位共阳数码管的段选信号连接到RD口。 3. 编写数码管控制代码,以便在四位共阳数码管上显示数字。 下面是一些可能有用的代码片段: 1. 串口通讯代码: ```c void send_char(char c) { while(!TXIF); // 等待发送缓冲区为空 TXREG = c; // 发送字符 } void send_number(int num) { char buffer[10]; sprintf(buffer, "%d", num); // 将数字转换为字符串 int i = 0; while(buffer[i] != '\0') { send_char(buffer[i]); // 逐个发送字符 i++; } } ``` 2. 配置RD口为输出模式: ```c TRISDbits.TRISD0 = 0; // 设置RD0为输出模式 TRISDbits.TRISD1 = 0; // 设置RD1为输出模式 TRISDbits.TRISD2 = 0; // 设置RD2为输出模式 TRISDbits.TRISD3 = 0; // 设置RD3为输出模式 ``` 3. 数码管控制代码: ```c void display_digit(int digit, int position) { // 数码管段选信号对应的RD口位 int segment_pins[] = {0, 1, 2, 3, 4, 5, 6, 7}; // 数码管段选信号对应的码表值 int segment_values[] = { 0b0111111, // 0 0b0000110, // 1 0b1011011, // 2 0b1001111, // 3 0b1100110, // 4 0b1101101, // 5 0b1111101, // 6 0b0000111, // 7 0b1111111, // 8 0b1101111 // 9 }; // 设置段选信号为对应数字的码表值 PORTD = (PORTD & 0xF0) | segment_values[digit]; // 将段选信号输出到对应的RD口位 PORTDbits.RD0 = (position == 0); PORTDbits.RD1 = (position == 1); PORTDbits.RD2 = (position == 2); PORTDbits.RD3 = (position == 3); } void display_number(int num) { // 显示前四位数字,不足四位补零 int digits[4] = {0, 0, 0, 0}; int i = 0; while(num > 0 && i < 4) { digits[i] = num % 10; num /= 10; i++; } for(int j = 0; j < 4; j++) { display_digit(digits[j], j); __delay_ms(5); // 延时一段时间以便观察到数字变化 } } ``` 这些代码片段可以根据您的具体应用场景进行修改和调整。希望这些信息能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随心的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值