51单片机数码管循环左移 为啥我下面的代码无法实现??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机数码管循环左移 为啥我下面的代码无法实现??相关的知识,希望对你有一定的参考价值。
#include<reg52.h>
#define a P0
typedef unsigned char uchar;
typedef unsigned int uint;
sbit latch1=P2^2;
sbit latch2=P2^3;
uchar temptable[8];
uint code table[]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;
uint code weima[]=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;
void display(uchar firstbit,uchar num);
void delay(uchar i);
----------------------------------------------------------------------------------------------------------
void main(void)
uchar i,s,m;
while(1)
for(s=0;s<8;s++)
temptable[s]=0;
for(i=0;i<8;i++)
for(m=0;m<i+1;m++)
temptable[8-m]=table[m];
display(0,8);
for(i=8;i>0;i--)
temptable[i]=0;
for(m=0;m<i;m++)
temptable[m]=table[m+1];
display(0,8);
---------------------------------------------------------------------------------------------------------
void delay(uchar i)
while(--i)
void display(uchar firstbit,uchar num)
uchar n;
for(n=0;n<num;n++)
a=0;
latch1=1;
latch1=0;
a=weima[firstbit+n];
latch2=1;
latch2=0;
a=temptable[n];
latch1=1;
latch1=0;
delay(6000);
最好能提供显示部分的电路图。
现在的显示,究竟是什么样?追问
硬件 显示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);
//-------------------------------------
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,num;
sbit dula=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;
dula=1;
P0=table[0];
dula=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;
dula=1;
P0=table[num];
dula=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;
dula=1;
P0=table[num];
dula=0;
数码管同时显示12345678
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,numdu,numwe;
sbit dula=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()
numdu=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;
numdu++;
if(numdu==9)
numdu=1;
dula=1;
P0=table[numdu];
dula=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; /*左移*/
参考技术B 我先看看,明天回复
以上是关于51单片机数码管循环左移 为啥我下面的代码无法实现??的主要内容,如果未能解决你的问题,请参考以下文章