求一个八位数码管循环右移的程序!!!!要C程序!!51单片机来控制

现象:开始时显示0,从最低位开始显示,一直循环到最高位显示,最后就保持在最高位,然后显示1,1也从最低位开始显示,一直循环到次高位,最后也保持在次高位,一直这样循环显示!!
也就是要求数码管拉幕式显示!!!!

减乘除,没有小数点
、显示负数的功能,只能帮到这了。

#include <reg51.h>
#include <absacc.h>
#include <math.h>
#pragma NOREGPARMS
#define g DBYTE[0x30]
#define s DBYTE[0x31]
#define b DBYTE[0x32]
#define q DBYTE[0x33]
#define w DBYTE[0x34]
#define sw DBYTE[0x35]
#define bw DBYTE[0x36]
#define qw DBYTE[0x37]
#define flag DBYTE[0x38]
#define ww DBYTE[0x39]
#define var DBYTE[0x40]
unsigned long data a0 _at_ 0x42;
unsigned long data a1 _at_ 0x46;
unsigned long data a2 _at_ 0x50;
void count ()
{
unsigned long temp;
if(var>=0&&var<=9)
{
if(ww==1)
{
qw=bw=sw=w=q=b=s=g=0;
g=var;
ww=0;
}
else
{
qw=bw;
bw=sw;
sw=w;
w=q;
q=b;
b=s;
s=g;
g=var;
}
}
if(var>=0x0a&&var<=0x0d)
{
a0=qw*10000000+bw*1000000+sw*100000+w*10000+q*1000+b*100+s*10+g;
if(var==0x0a)flag=1;//加法运算标志
if(var==0x0b)flag=2;//减法运算标志
if(var==0x0c)flag=3;//乘法运算标志
if(var==0x0d)flag=4;//除法运算标志
ww=1;
}
if(var==0x0e)
{
a1=qw*10000000+bw*1000000+sw*100000+w*10000+q*1000+b*100+s*10+g;
if(flag==1)a2=a1+a0;
if(flag==2)a2=a0-a1;
if(flag==3)a2=a1*a0;
if(flag==4)a2=a0/a1;
g=a2%10;
temp=a2/10;
s=temp%10;
temp=temp/10;
b=temp%10;
temp=temp/10;
q=temp%10;
temp=temp/10;
w=temp%10;
temp=temp/10;
sw=temp%10;
temp=temp/10;
bw=temp%10;
qw=temp/10;
}
if(var==0x0f)
{
qw=bw=sw=w=q=b=s=g=var=flag=0;
}
}
另外,团IDC网上有许多产品团购,便宜有口碑
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-30
这是一个共阳四位数码管的程序,循环显示,希望对你有帮助
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x90,0xc0,0xc0,0xa1};
//uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar a;

uchar b;

void delay(uchar z)
{
uchar x;
uint y;
for(x=0;x<z;x++)
for(y=0;y<500;y++);

}
void main()
{
b=0x10;
while(1)
{

for(a=0;a<4;a++)
{
P3=b;
P2=table[a];
delay(250);
if(b==0x80)b=0x08;
b=b<<1;

}
}
}追问

和我描述的现象还是不一样?是拉幕显示!!!不过也谢谢你了

第2个回答  2011-03-30
程序要和电路保持一致才可以。

怎么用c语言编写数码管1234和5678来回闪烁
1.51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include<reg51.h> \/\/51单片机头文件#include <intrins.h> \/\/包含有左右循环移位子函数的库#define uint unsigned int \/\/宏定义#define uchar unsigned char \/\/宏定义sbit beep=P2^3;void delay(uint z) \/\/延时函数,z...

51单片机中如何设置数码管循环左移?
1. 定义一个八位二进制数字并赋初值0xFF,用来驱动八个数码管的显示。2. 设定一个循环,将八个数码管的八位数据按顺序向左移动一个位置。具体实现时,可以将数字左移一位,并在最右边补0,同时将最右边的一位数保存,以便在移动完成后加到最左边。3. 将移动完成后保留的最右边的一位数添加到最...

求数码管循环移位显示的原理?详细原理!怎么实现!!!就像下面这个程序...
是8位数码管把,写着一个段选,一个位选。两个数组,一个控制显示什么数,一个控制那个数码管显示。当段选=1是,就写入要显示哪个数,然后关段选开位选,写让哪个数码管显示这个数。然后延时一会,确保数码管被点亮(延时不能太久,不然会看到数码管闪烁)。然后清屏(熄灭数码管,不然下个数码管...

CH451和单片机数码管显示程序(循环右移)
DataPort=WeiMa[i]; \/\/取位码 LATCH2=1; \/\/位锁存 LATCH2=0;DataPort=DuanMa[i]; \/\/取显示数据,段码 LATCH1=1; \/\/段锁存 LATCH1=0;Delay(200); \/\/扫描间隙延时,时间太长会闪烁,太短会造成重影 i++;if(8==i) \/\/检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描...

8只LED左右来回点亮 求程序
DJNZ D1,QQ1 ajmp loop TAPE3: MOV D1,#08H ;暗点右移 MOV A,#01H QQ2: MOV P0,A ACALL YS RL A DJNZ D1,QQ2 ajmp loop TAPE4: MOV D1,#08H ;暗点右移 MOV A,#80H QQ3: MOV P0,A ACALL YS RR A DJNZ D1,QQ3 ajmp loop TAPE5: MOV D1,#08H...

51单片机双键控制八位流水灯C程序
sbit K1=P1^0;sbit K2=P1^1;void t0isr() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;num++;if(num>=20){ num=0;flag=1;} } main(){ uchar LED;TMOD=0x01;TH0=(65536-50000)\/256;TL0=(65536-50000)%256;ET0=1;EA=1;while(1){ if(K1==0){ while(K1=...

51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿...
电路:一般的单片机 和 TTL集成电路芯片,都是灌电流能力强,拉电流能力极弱。为此,应该用输出低电平,来带动负载。而你的电路,是用高电平带动LED发光的,仿真,也许还行;实际的电路,LED是不会亮的。

用51单片机实现8位并行数据转为串行数据的C程序
1; }}void BitsOutput(unsigned char temp)\/\/从最低位移出{ char count = 8; while(count--) { if((temp & 0x01) == 0x01) BIT_OUTPUT = 1; else BIT_OUTPUT = 0; temp >>= 1; }}

51单片机怎么实现数码管1-8循环(间隔一秒)计数和4组流水灯间隔两秒同时...
一个数码管实现的话还是比较简单了 首先搞清楚8段数码管的显示原理,将1到8所对应的2进制码写出来,将数码管插线接到p0口,编程序时每个数字显示完后加上一个延时程序,延时程序就是用两个内部寄存器实现的,对应一秒你可以算一下,具体算法就是用一秒除以机器周期,看它能循环多少次,这里可以看看书...

51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿...
主程序 void main(){ uchar i;while(1){ P2=0x01;\/\/此处有改 for(i=0;i<7;i++){ P2=_crol_(P2,1); \/\/P2 的值向左循环移动 DelayMS(150);} P2=0x80;\/\/此处有改 for(i=0;i<7;i++){ P2=_cror_(P2,1); \/\/P2 的值向右循环移动 DelayMS(150);} } } 您复制进去试一...

相似回答
大家正在搜