数码管流水灯

使用STC89C52芯片P2.0~P2.7分别控制8位数码管,P0.0~P0.7分别控制各位数码管(共阳极)A 、B、C、D、E、F、G、H。
使用该电路图分别以下功能:
按下k18(P1.4口低电平控制)一次全部数码管自动显示数字从0到9(循环);两次全部数码管自动显示数字从9到0(循环)。
按下K19(P1.5口低电平控制)一次全部数码管显示1,两次全部数码管显示2,如此类推(从1到9),一直到显示9。再按一次由从1开始从新循环。
按下K20(P1.6口低电平控制)一次全部显示9,两次全部显示8,如此类推(从9到0),一直到显示0.再按一次由1开始从新循环。

#include<reg51.h>
#include "intrins.h"
sbit key1st=P1^4;   //K18
sbit key2nd=P1^5;   //K19
sbit key3rd=P1^6;   //K20
sbit key4th=P1^7;   //K21
unsigned char a,i,k,l,mark1st,mark2nd,mark3rd;
unsigned char code led[10]={
  0xc0,0xf9,0xa4,0xb0,0x99,0x92,
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一段代码示例,实现51单片机的数码流水效果。请注意,以下代码示例仅供参考,具体实现方式可能因硬件环境、编程语言等因素而有所不同。 ``` #include <reg52.h> // 定义各个数码管对应的引脚 sbit DIG1 = P2^2; sbit DIG2 = P2^3; sbit DIG3 = P2^4; sbit DIG4 = P2^5; // 定义数字0-9的各个段的状态 unsigned char digitSegments[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98}; void delay(unsigned int ms) { // 延时函数,延时时间为ms毫秒 unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 1141; j++); } } void main() { unsigned char i, j; while (1) { for (i = 0; i < 10; i++) { // 显示当前数字 DIG1 = 1; DIG2 = 0; DIG3 = 0; DIG4 = 0; P0 = digitSegments[i]; delay(20); // 显示下一个数字 DIG1 = 0; DIG2 = 1; DIG3 = 0; DIG4 = 0; P0 = digitSegments[(i + 1) % 10]; delay(20); // 显示下下一个数字 DIG1 = 0; DIG2 = 0; DIG3 = 1; DIG4 = 0; P0 = digitSegments[(i + 2) % 10]; delay(20); // 显示下下下一个数字 DIG1 = 0; DIG2 = 0; DIG3 = 0; DIG4 = 1; P0 = digitSegments[(i + 3) % 10]; delay(20); } } } ``` 这段代码使用51单片机实现了数码流水效果。在`main()`函数中,通过循环依次显示0-9的数字,并且每次显示3个数字,形成流水效果。在循环中,先显示当前数字,然后通过设置不同的数码管引脚,依次显示下一个数字、下下一个数字和下下下一个数字。每次显示完一个数字后,会等待一段时间,再显示下一个数字,循环往复,实现了数码流水效果。在这段代码中,`delay()`函数用于延时,确保每个数字的显示时间一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值