51单片机数码管循环左移 为什么我下面的代码无法实现??
发布网友
发布时间:2022-07-10 07:56
我来回答
共3个回答
热心网友
时间:2023-10-13 14:07
用硬件实验,还是用PROTEUS仿真?
最好能提供显示部分的电路图。
现在的显示,究竟是什么样?追问硬件 显示01234567没有变化
有两个74hc573d芯片 一个控制位码 一个控制段吗
追答既然显示函数没有问题,那就仅仅需要改动主函数:
//-----------------------------------
void main(void)
{
uchar i, s, m;
for(m = 0; m < 8; m++) temptable[m] = table[m]; //初始化显示内容.
while(1) {
//--------------------------下面进行移位.
s = temptable[0];
for(i = 0; i < 7; i++) temptable[i] = temptable[i + 1];
temptable[7] = s;
//--------------------------下面显示几百毫秒.
for(i = 0; i < 250; i++) display(0, 8);
}
}
//-------------------------------------
热心网友
时间:2023-10-13 14:08
流水灯按1秒间隔流动,数码管间隔2秒从0到F变化显示
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,num;
sbit la=P2^2;
sbit wela=P2^3;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
num=0;
aa=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
temp=0xfe;
P1=temp;
la=1;
P0=table[0];
la=0;
wela=1;
P0=0xc0;
wela=0;
while(1)
{
delay(1000);
temp=_crol_(temp,1);
P1=temp;
/*if(aa==40)
{
aa=0;
num++;
if(num==16)
num=0;
la=1;
P0=table[num];
la=0;
}*/
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==40)
{
aa=0;
num++;
if(num==16)
num=0;
la=1;
P0=table[num];
la=0;
}
}
数码管同时显示12345678
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,num,numwe;
sbit la=P2^2;
sbit wela=P2^3;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code tablewe[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//void delay(uint z);
void main()
{
num=0;
numwe=0;
aa=0;
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
//delay(1000);
//temp=_crol_(temp,1);
//P1=temp;
if(aa==1)
{
aa=0;
num++;
if(num==9)
num=1;
la=1;
P0=table[num];
la=0;
wela=1;
P0=tablewe[numwe];
wela=0;
numwe++;
if(numwe==8)
numwe=0;
}
}
}
/*
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}*/
void timer0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
aa++;
}
或者
#include "reg51.h"
void delay() /*延时函数*/
{ int t;
for(t=0; t<0x6000; t++);
}
main()
{
unsigned char i;
for(;;)
{
P1=1; /*P1 口最低位亮*/
for(i=0; i<8; i++)
{
delay();
P1=P1<<1; /*左移*/
}
}
}
热心网友
时间:2023-10-13 14:08
我先看看,明天回复