#include <reg52.h> #include <intrins.h> typedef unsigned int uint; typedef unsigned char uchar; void display ( uint count ); void delay(uint i); sbit P2_0=P2^0; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P1_0=P1^0; sbit P1_1=P1^1; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//p0口决定亮什么 uint i; uint j; uint t; void main() { uint count = 0; while(1) { if(P3_4==0) { delay(30000); P1_0=0; } if(P3_5==0) { delay(30000); P1_0=1; } display(count); count++; if(count > 9999) count = 0; delay(1000); } } void delay(uint n) { uint i,j; for(i=n;i>0;i--) for(j=114;j>0;j--); } void display ( uint count ) { P0=table[count/1000]; P2_0=0; delay (100); P2_0=1; P0=table[count/100%10]; P2_1=0; delay (100); P2_1=1; P0=table[count/10%10]; P2_2=0; delay (100); P2_2=1; P0=table[count%10]; P2_3=0; delay (100); P2_3=1; }这个代码改成数码管一直亮着加一而不是闪动着加
时间: 2024-03-24 18:39:51 浏览: 74
您需要将 `display` 函数中的延时去掉,同时将 `count` 的值在每次加一之后直接显示出来,而不是等待延时结束后再进行显示。修改后的代码如下:
```
#include <reg52.h>
#include <intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
void display ( uint count );
void delay(uint i);
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//p0口决定亮什么
uint i;
uint j;
uint t;
void main() {
uint count = 0;
while(1) {
if(P3_4==0) {
delay(30000);
P1_0=0;
}
if(P3_5==0) {
delay(30000);
P1_0=1;
}
display(count);
count++;
if(count > 9999) count = 0;
}
}
void delay(uint n) {
uint i,j;
for(i=n;i>0;i--)
for(j=114;j>0;j--);
}
void display ( uint count ) {
P0=table[count/1000];
P2_0=0;
P0=table[count/100%10];
P2_1=0;
P0=table[count/10%10];
P2_2=0;
P0=table[count%10];
P2_3=0;
}
```
注意,这个代码只能实现四位数码管一直亮着加一,如果您使用的是其他类型的数码管,需要根据具体的接口和显示方式进行修改。
阅读全文