找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1040|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机 将显存单元的数据进行逐个交换,使数码管形成移动显示效果

[复制链接]
跳转到指定楼层
楼主
ID:400845 发表于 2020-10-21 08:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
* 8位数码管显示                                                    *
*                                                                  *
********************************************************************
*                                                                  *
* 描述:                                                           *
*      将显存单元的数据进行逐个交换,使数码管形成移动显示效果。    *
*                                                                  *
*******************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar data display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,      
                      0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,};
unsigned char count,shift,temp;
/**********************************************************
延时子程序
**********************************************************/
void delayms(uint ms)
{
   uchar k;
   while(ms--)
   {
     for(k = 0; k < 120; k++);
   }
}
/**********************************************************
数据转移函数
**********************************************************/
void  exchange()
{
    uchar  i,j;
    display[0]=display[8];
    for(i=8; i!=0; i--)
    {     
       j=i-1;
       display[i] = display[j];
    }
   
}
/*********************************************************
  数码管显示函数
*********************************************************/
void  disp()
{
  uchar i;
  shift=0x7f;
  
  for(i=0; i<8; i++)
  {  
    P0=display[i+1];
    P2=shift;
    shift=_cror_(shift,1);
    delayms(1);
  }
  P2=0xff ;
}
/*********************************************************
  主函数
*********************************************************/
void main()
{   
    P0=0xff;
    P2=0xff;
    TMOD=0x01;
    TH0=0x4c;           
    TL0=0x00;      
    EA=1;
    ET0=1;
    TR0=1;
    while(1)   
    {
      disp();
    }   
}
/*********************************************************
定时器0中断服务函数  
*********************************************************/
void timer0() interrupt 1
{         
    TR0=0;
    TH0=0x4c;        //50ms定时常数           
    TL0=0x00;
    count++;
    if(count==20)
    {
       count=0;
     exchange();    //1s转换一次数据
    }
    TR0=1;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2020-10-21 15:59 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表