以下是我的程序
#include<reg52.h>
#define DatePort P0
sbit DuanMa=P2^2;
sbit WeiMa=P2^3;
unsigned char code Date_Duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code Date_Wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char TempDate[8];
void Delay(unsigned int t);
void Display(unsigned char FirstBit,unsigned char Num);
main()
{
unsigned int j,i,k,s;
while(1)
{
j++;
if(j==20)
{
j=0;
if(k==0)
{
for(s=0;s<8;s++)
TempDate[s]=0;
}
TempDate[8-i]=Date_Duan[k];
TempDate[9-i]=0;
if(i==8-k)//变数
{
i=0;
k++;
if(k==8)
k=0;
}
i++;
}
Display(0,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++)
{
DatePort=0;
DuanMa=1;
DuanMa=0;
DatePort=Date_Wei[i+FirstBit];
WeiMa=1;
WeiMa=0;
DatePort=TempDate[i];
DuanMa=1;
DuanMa=0;
Delay(200);
}
}
很想知道 为什么数码管莫有反应啊!!!!!! 求高手!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
加下注释
- /*多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/
- #include<reg52.h>
- #define DatePort P0
- sbit DuanMa=P2^2;//定义段锁存
- sbit WeiMa=P2^3;//定义位锁存
- unsigned char code Date_Duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值0-9
- unsigned char code Date_Wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应点亮的数码管
- unsigned char TempDate[8];//存放临时数据
- void Delay(unsigned int t);//演延时程序声明
- void Display(unsigned char FirstBit,unsigned char Num);//数码管动态扫描程序声明
- main()
- {
- unsigned int j,i,k,s;
- while(1)
- {
- j++;
- if(j==20)
- {
- j=0;
- if(k==0)
- {
- for(s=0;s<8;s++)
- TempDate=0;//完全循环完成后清零所有缓冲区
- }
-
- TempDate[8-i]=Date_Duan[k];//把需要显示的字符依次送缓冲区
- TempDate[8+1-i]=0;//不需要显示的区域清零
- if(i==8-k)//通过对K的控制 进而使数据移动到想要的结果比如 0的话就让0从第8个数码管动态移动到第1个数码管 1的话从第7个数码管动态移动到第1个 以此类推
- {
- 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++)
- {
- //清空数据
- DatePort=0;
- DuanMa=1;
- DuanMa=0;
-
- DatePort=Date_Wei[i+FirstBit];//取位码
- WeiMa=1;//位锁存
- WeiMa=0;
- DatePort=TempDate;//取显示数据
- DuanMa=1;//段锁存
- DuanMa=0;
- Delay(200);
- }
- }
复制代码一周热门 更多>