数码管右移

来源:互联网 发布:ubuntu 存储空间 编辑:程序博客网 时间:2024/05/16 05:31
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换sbit LATCH1=P2^2;//定义锁存使能端口 段锁存sbit LATCH2=P2^3;//                 位锁存unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[10]; //存储显示值的全局变量void Delay(unsigned int t); //函数声明void Display(unsigned char FirstBit,unsigned char Num);main(){ unsigned int i,k,j; unsigned char s; while(1)      {   j++;   if(j==20)       {  j=0; if(0==k)     {     for(s=0;s<10;s++) //完全循环完成后清零所有缓冲区TempData[s]=0;  }          TempData[8-i]=dofly_DuanMa[k]; //把需要显示的字符依次送缓冲区          TempData[9-i]=0;  //不需要显示的区域清零  if(i==(8-k))    {    i=0;            k++;if(k==8)   k=0;}  i++; }   Display(0,8);//从第一位显示,共显示8位      }}void Delay(unsigned int t){ while(--t);}void Display(unsigned char FirstBit,unsigned char Num){      unsigned char i;    for(i=0;i<Num;i++)   {    DataPort=0;   //清空数据,防止有交替重影       LATCH1=1;     //段锁存       LATCH1=0;       DataPort=dofly_WeiMa[i+FirstBit]; //取位码        LATCH2=1;     //位锁存       LATCH2=0;       DataPort=TempData[7-i]; //取显示数据,段码   这里只需要 把扫描方向更换一下即可        LATCH1=1;     //段锁存       LATCH1=0;          Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影       }}

0 0