本人菜鸟,做课程设计,要求89C51单片机实现4位7段数码管动态和静态显示,希望大神能给写个程序,谢谢了

 我来答
百度网友a2974d0dc
2013-01-15 · TA获得超过1674个赞
知道小有建树答主
回答量:769
采纳率:0%
帮助的人:677万
展开全部

/********************/

/*

按键静态显示不同数字,即按1键显示1

动态显示:数字移动显示

*/

#include<reg52.h>

#define uint unsigned int 

#define uchar unsigned char 

sbit Dp=P0^6;

sbit  d1=P2^4;

sbit d2=P2^5;

sbit d3=P2^6;

sbit d4=P2^7;

uchar code table[]=

{0x28,0xeb,0x32,0xa2,

0xe1,0xa4,0x24,0xea,

0x20,0xa0,0xf7};

 uchar code table1[]= {0xfe,0xfd,0xfb}; 

 

uint num1=0,temp,num,flag=0;

char Char[50]="===",*p;

uchar dp=0,wei;

float A=0;

void delay(uint z)

{  uint x;

 uint y;

 for(x=z;x>0;x--) 

for(y=110;y>0;y--) ;  }

void jian() //键盘扫描         

{

 if(num1==3)num1=0;

 P2=table1[num1];

 temp=P2;

 temp=temp&0xf0;

 if(temp!=0xf0)

 {delay(5);

 temp=P2;

 temp=temp&0xf0;

 if(temp!=0xf0)

     {temp=P2;flag=1;

      switch(temp>>4)

      {case 0x0e:num=0+4*num1;

        break;

       case 0x0d:num=1+4*num1;

        break;

       case 0x0b:num=2+4*num1;

        break;

       case 0x07:num=3+4*num1;

        break;   

 

 

      }

        while(temp!=0xf0)

      {

       temp=P2;

       temp=temp&0xf0;

      }

   

       delay(5);

        while(temp!=0xf0)

      {

       temp=P2;

       temp=temp&0xf0;

      }

     

     }

 }

 

    num1++;  P2=0xff;

}

//数码管显示

void display(char z[],uchar z1)   //“:“表示“-”    /***无

{  if(z[0]-'0'<13)  //不能为小于等于0

 {

   d1=0;P0=table[z[0]-'0'];if(z1==1)Dp=0;

   delay(1);d1=1;P0=0xff;

  }

 

 if(z[1]-'0'<13){d2=0;P0=table[z[1]-'0'];if(z1==2)Dp=0;delay(1);d2=1;P0=0xff; }

 if(z[2]-'0'<13){d3=0;P0=table[z[2]-'0'];if(z1==3)Dp=0;delay(1);d3=1;P0=0xff;}

 if(z[3]-'0'<13){d4=0;P0=table[z[3]-'0'];if(z1==4)Dp=0;delay(1);d4=1;P0=0xff; }   }

 

void main()

{

  while(1)

  {

    jian();

   if(flag==1){flag=0; 

      Char[wei+3]='0'+num; wei++;

 

      p=Char+wei-1;

     

      } 

     if(wei>0)display(p,dp); 

  }

}

 

 

硬件电路图

硬件开发88
2013-01-15 · TA获得超过8677个赞
知道大有可为答主
回答量:1759
采纳率:84%
帮助的人:620万
展开全部
给你个参考程序动态显示 0-9
/**************************************************
*
* 4位数码管动态显示
*
*
*
*
*
***************************************************/
#include "REG52.H"

sbit SHUG_01 = P2^0; //数码管1
sbit SHUG_02 = P2^1; //数码管2
sbit SHUG_03 = P2^2; //数码管3
sbit SHUG_04 = P2^3; //数码管4

#define LED_DATA P0 //P1数据端口
unsigned char code value_tab0[]=
{
0xC0,
0xF9,
0xA4,
0xB0,
0x99,
0x92,
0x82,
0xF8,
0x80,
0x90
}; //共阳极0-9显示断码

/*
* 延时1ms延时子函数
**/
void Delay_1ms(unsigned int Time)
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);
}

/*
* 数码管动态显示0-9
**/
void Display_ShmgtablCmd(void)
{
unsigned char temp;
for(temp = 0; temp < 10; temp++)
{
SHUG_01 = 1;
SHUG_02 = 1;
SHUG_03 = 1;
SHUG_04 = 1;
LED_DATA = value_tab0[temp];
Delay_1ms(500);
}
}

/*
* 函数主体
**/
int main(void)
{
P0 = P1 = P2 = 0x00;

while(1)
{
Display_ShmgtablCmd();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
别错过我Du
2013-01-15 · 超过14用户采纳过TA的回答
知道答主
回答量:28
采纳率:100%
帮助的人:38.5万
展开全部
这个很简单很基础啊。
追问
恩…

望指点啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式