C语言编写数码管显示,各位大神,如何用C语言实现在数码管上实现1234同时亮

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*将移位寄存器内的数据锁存到输出寄存器并显示                                              */

/*                                                                                                             */

/********************************************************/

void OUT_595(void)

{

RCK_595=0;

_nop_();

_nop_();

RCK_595=1;                        //上升沿将数据送到输出锁存器

_nop_();

_nop_();

_nop_();

RCK_595=0;

}

/********************************************************

*

*   主程序

*

*********************************************************/

main()

{

SCLK_595=0;

RCK_595=1;

while(1)

{

uchar i;

LED1=0;

LED2=0;

LED3=0;

LED4=0;

for (i=0; i<16; i++)

{

temp=DAT[i];          //取显示数据

WR_595();

OUT_595();

delay(200);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言实现数码管同时显示1234的代码如下: ```c #include <reg51.h> // 数码管编码表 unsigned char code seg_table[] = { 0xc0, // 0 0xf9, // 1 0xa4, // 2 0xb0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xf8, // 7 0x80, // 8 0x90 // 9 }; void main() { unsigned char i, j, k, l; while (1) { for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { for (k = 0; k < 10; k++) { for (l = 0; l < 10; l++) { // 显示千位 P0 = seg_table[i]; P2 = 0x08; delay(); // 显示百位 P0 = seg_table[j]; P2 = 0x04; delay(); // 显示十位 P0 = seg_table[k]; P2 = 0x02; delay(); // 显示个位 P0 = seg_table[l]; P2 = 0x01; delay(); } } } } } } // 延时函数 void delay() { unsigned char i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 200; j++); } } ``` 汇编语言实现8个数码管同时显示12345678的代码如下: ```assembly ORG 0x0000 MOV SP, #0x7F ; 数码管编码表 SEG_TABLE: DB 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90 ; 程序入口 START: MOV A, #0x00 ; A寄存器存放计数值 LOOP: INC A ; 计数值加1 CJNE A, #10, LOOP ; 如果计数值不等于10则跳转到LOOP MOV A, #0x00 ; A寄存器清零 OUT_LOOP: INC A ; 计数值加1 CJNE A, #10, OUT_LOOP ; 如果计数值不等于10则跳转到OUT_LOOP MOV A, #0x00 ; A寄存器清零 IN_LOOP: INC A ; 计数值加1 CJNE A, #10, IN_LOOP ; 如果计数值不等于10则跳转到IN_LOOP MOV A, #0x00 ; A寄存器清零 MOV R0, #0x00 ; R0寄存器存放数码管段码 MOV R1, #0x80 ; R1寄存器存放数码管位码 MOV R2, #0x00 ; R2寄存器存放循环计数值 MOV R3, #0x01 ; R3寄存器存放位码移位值 DISPLAY_LOOP: MOV R0, SEG_TABLE+A ; 从编码表中获取段码 MOV P0, R0 ; 将段码输出至P0口 MOV P2, R1 ; 将位码输出至P2口 CALL DELAY ; 调用延时函数 INC R2 ; 循环计数值加1 CJNE R2, #8, BIT_SHIFT ; 如果循环计数值等于8则跳转到BIT_SHIFT MOV R2, #0x00 ; 循环计数值清零 ADD R1, R3 ; 位码移位1位 CJNE R1, #0x10, DISPLAY_LOOP ; 如果位码不等于0x10则跳转到DISPLAY_LOOP MOV R1, #0x80 ; 位码恢复为0x80 SJMP LOOP ; 跳转到LOOP,开始下一轮循环 ; 位码移位子程序 BIT_SHIFT: ADD R1, R3 ; 位码移位1位 RET ; 延时函数 DELAY: MOV R7, #0x0A L1: MOV R6, #0xFF L2: DJNZ R6, L2 DJNZ R7, L1 RET END ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值