C51入门5,动态数码管显示实验

实验一:要求:利用动态扫描和定时器1在数码管上显示出从7432开始以1/10秒的速度往下递减直至7398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“ABCD”。到此保持住。

程序:

 //数码动态显示
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x28,0xeb,0x32,0xa2,
0xe1,0xa4,0x04,0xea,
0x00,0x80,0x60,0x25,
0x3c,0x23,0x34,0x74};
uchar temp,t0,t1,bai,shi,ge,flag,flag1;
uint shu;
void init();
void display(uchar,uchar,uchar,uchar);
//延时函数
void delay(uint z)
{
 uint t1,y;
 for(t1=z;t1>0;t1--)
  for(y=110;y>0;y--);
}
//主函数
void main()
{
 init();
 while(1)
 {
  if(flag1!=1)
   display(7,bai,shi,ge);
  else
   display(10,11,12,13); //显示A,B,C,D 
 }
}
//系统初始化
void init()
{
 shu=432;     //开始数目是432
 temp=0xfe;
 P1=temp;     //数目给位地址
 TMOD=0x11;     //设置定时器0和1的工作方式
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 EA=1;      //开总中断
 ET0=1;      //开定时器中断0
 ET1=1;      //开定时器中断1
 TR0=1;      //启动定时器中断0
 TR1=1;      //启动定时器中断1
}
//中断0,工作在模式1,控制LED灯
void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 t0++;
 if(flag!=1)
  {
  if(t0==10)
   {
    t0=1;
    temp=_crol_(temp,1); //循环右移动,控制灯的闪烁
    P1=temp;
   }
  }
 else
  {
   if(t0%4==0)    //灯全亮和灭控制
    P1=~P1;
   if(t0==60)    //灯全灭
   {
    TR0=0;
    P1=0xff;
    flag1=1;
   }
  } 
}
//中断1,工作是模式3,控制数码管
void timer1() interrupt 3
{
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 t1++;
 if(t1==2)
  {
   t1=0;
   shu--;     //数自减
   bai=shu/100;
   shi=shu%100/10;
   ge=shu%10;
   if(shu==398)
    {
     TR0=0;     //关中断0
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     TR0=1;     //开打中断0
     flag=1;     //标志位为1
     t0=0;
     P1=0xff;
     TR1=0;     //关中断1
    } 
  } 
}
//显示函数
void display(uchar aa,uchar ba,uchar sh,uchar g)
{
        P0=table[aa];    //位选
  P2=0x7f;     //段选
  delay(5);

        P0=table[ba];
  P2=0xbf;
  delay(5);

  P0=table[sh];
  P2=0xdf;
  delay(5);

  P0=table[g];
  P2=0xef;
  delay(5);
}

 

posted on 2013-03-16 16:54  AI_JJ  阅读(483)  评论(0)    收藏  举报

导航