微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于51单片机 红绿灯数码管程序

基于51单片机 红绿灯数码管程序

时间:11-23 来源:互联网 点击:
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换

#define CtrlPort P1 //定义控制端口

unsigned char code DuanMa[10]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9

unsigned char code WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分别对应相应的数码管点亮,即位码

unsigned char TempData[8]; //存储显示值的全局变量

void Delay(unsigned int t); //函数声明

void Display(unsigned char FirstBit,unsigned char Num);

unsigned char j,k,flag=1,flag1=1,flag2=1,aa=1,bb=1,cc=1,flag22=1;

unsigned char num=25,num1=30,num11=30,num22=25;

void init()

{

TMOD=0x11;

TH1=(65536-50000)/256;

TL1=(65536-50000)%6;

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

EA=1;

ET1=1;

ET0=1;

TR1=1;

TR0=1;

}

void main()

{

init();

while(1)

{

if(aa==1)

{

if(flag==1)

{

if(j==20)

{

j=0;

num--;

}

TempData[0]=DuanMa[num];

TempData[1]=DuanMa[num/10];

Display(0,2);

Display(2,2);

}

else

{

num=0;

TempData[0]=DuanMa[num];

TempData[1]=DuanMa[num/10];

Display(0,2);

Display(2,2);

if(j==120)

{

j=0;

num=25;

flag=1;

flag1=1;

aa=0;

}

}

}

if(num==0)

{

if(flag1==1)

{

TR0=0;

flag=0;

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

TR0=1;

flag1=0;

}

}

if(aa==0)

{

if(j==20)

{

j=0;

num11--;

}

TempData[0]=DuanMa[num11];

TempData[1]=DuanMa[num11/10];

Display(0,2);

Display(2,2);

if(num11==-1)

{

num11=30;

aa=1;

}

}

if(bb==1)

{

if(k==20)

{

k=0;

num1--;

}

TempData[0]=DuanMa[num1];

TempData[1]=DuanMa[num1/10];

Display(4,2);

Display(6,2);

if(num1==-1)

{

bb=0;

num1=30;

}

}

if(bb==0)

{

if(cc==1)

{

if(flag22==1)

{

if(k==20)

{

k=0;

num22--;

}

TempData[0]=DuanMa[num22];

TempData[1]=DuanMa[num22/10];

Display(4,2);

Display(6,2);

}

else

{

num22=0;

TempData[0]=DuanMa[num22];

TempData[1]=DuanMa[num22/10];

Display(4,2);

Display(6,2);

if(k==120)

{

k=0;

flag22=1;

num22=25;

flag2=1;

bb=1;

}

}

}

if(num22==0)

{

if(flag2==1)

{

TR1=0;

flag22=0;

TH1=(65536-50000)/256;

TL1=(65536-50000)%6;

TR1=1;

flag2=0;

}

}

}

}

}

void Delay(unsigned int t)

{

while(--t);

}

void Display(unsigned char FirstBit,unsigned char Num)

{

unsigned char i;

for(i=0;i

{

DataPort=0; //清空数据,防止有交替重影

CtrlPort=WeiMa[i+FirstBit]; //取位码

DataPort=TempData[i]; //取显示数据,段码

Delay(100); // 扫描间隙延时,时间太长会闪烁,

//太短会造成重影

}

}

void exter0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

j++;

}

void exter1() interrupt 3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%6;

k++;

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top