基于80C51单片机的LED动态显示实例

基于80C51单片机的LED动态显示实例,第1张

  单片机80c51接线图如图1所示。图1中,4位显示管用共阳极。运用动态显示,采用循环导通或循环截止各位显示器的做法。当循环显示时间间隔较小时,由于人眼的暂留特性,就将看不出数码管的闪烁现象。

基于80C51单片机的LED动态显示实例,第2张  
图1 单片机80c51接线图

  控制系统设计

  程序框图

基于80C51单片机的LED动态显示实例,第3张  
图2 程序框图

  程序清单

  程序写入80c51芯片,如下

  #include

  /*---------------------定义变量----------------------------------*/

  sbit p1_0=P1^0;

  sbit p1_1=P1^1;

  sbit p1_2=P1^2;

  sbit p1_3=P1^3;

  sbit p1_4=P1^4;

  sbit p1_7=P1^7;

  //共阳极数码管显示0~9的段码

  unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  unsigned int count=0; //定义计数器

  unsigned int weight=0; //称重变量

  void delay(unsigned int TIme); //延时

  void display(unsigned int n); //数码管显示

  /*---------------------主程序------------------------------------*/

  void main(void) {

  /*-输入同步显示-*/

  while(1){

  int i=0;

  unsigned int a;

  if((P1&0x1f)==0x1f) ; //没按按键不动作

  else if(p1_0==0) {count=count+100;while(p1_0==0);} //while(P1!=0xff)为等待按键松开

  else if(p1_1==0) {count=count+10; while(p1_1==0);}

  else if(p1_2==0) {count=count+1; while(p1_2==0);}

  else if(p1_3==0) {count=0; while(p1_3==0);}//计算清零

  else if(p1_4==0) break; //确认开始称量

  p1_7=0;

  if(count>255) count=0; //计数器范围0~255g出后自动清零

  a=count;

  display(a); //调用显示函数

  }

  /*-判断称重是否足够并显示-*/

  while(1){

  weight=P3; //从P3口获取称重数据

  if(weight

  else p1_7=0; //P1.7置低位停止电机

  display(weight*5);

  if(p1_3==0) { while(p1_3==0);break;} //计算清零,并结束本次称量

  }

  }

  /*-------------------延时子程序------------------------------------*/ void delay(unsigned int TIme){

  unsigned int j=0;

  for(;time>0;TIme--)

  for(j=0;j<125;j++);

  }

  /*-------------------数码管显示子函数------------------------------*/

  void display(unsigned int n){

  P2=1; //P2=1选择千位

  P0=table[n/1000]; //千位取整后显示

  delay(10);

  n=n%1000; //千位取余

  P2=2; //P2=2选百位

  P0=table[n/100];

  delay(10);

  n=n%100;

  P2=4; //P2=4选十位

  P0=table[n/10];

  n=n%10;

  delay(10);

  P2=8; //P2=8选个位

  P0=table[n];

  delay(10);

  }

  程序说明

  1、称量范围为0~255g,用户输入超过255则会自动清零。

  2、4位显示管用共阳极。运用动态显示。通过P2口选位,P0口控制显示什么数字,再延时显示短暂的时间,然后重复P2口选下一位。由于人的视觉暂留,感觉4位数字同时显示。

  3、0xc0等表示十六进制的C0H。如“a=0x20”,相当于“a=16”。

  4、本程序由80c51的P0和P2口控制LED数码管的显示,P1.0~P1.5检测按键输入,P3口接收称重数据,P1.7输出高低电平控制电机启动停止,其他口接线为80c51提供运作基础。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2530555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存