电子信息工程专业实验Word文档下载推荐.docx
《电子信息工程专业实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子信息工程专业实验Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
{P1=~temp;
Delay();
temp=temp<
<
1;
P1=0xff;
}
P2=0xC7;
Delay();
P2=0xE3;
P2=0X8F;
P2=0XF1;
P2=0X1F;
P2=0XF8;
P2=0xff;
}
}
unsignedchartemp,temp1;
temp=0x01;
2;
}
temp1=0x02;
{P1=~temp1;
temp1=temp1<
#include<
reg51.h>
unsignedcharcodeledca[]={0x3f,
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelayms(unsignedint);
unsignedchari,J;
i=0;
J=0;
{
P2=J;
10;
{
P3=ledca[i];
delayms(200);
if(i==9)
J=J+1;
if(J==10)
{
J=0;
}
}
voiddelayms(unsignedintt)
unsignedinti,j;
for(j=0;
t;
j++)
for(i=0;
124;
{}
//定义引脚
#defineDATPINP0
#definePOSPINP2
#defineRELOAD_HIGH0xFC
#defineRELOAD_LOW0x18
sbitKEY0=P3^6;
sbitKEY1=P3^7;
//最小计时单位
unsignedintt,ms,sec,min,hr;
//共阳显示码
unsignedcharcodeledca[]={0xc0,
0xf9,0xa4,0xb0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阳位置码
unsignedcharcodeposca[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//毫秒延时
//LED显示
voiddisplay(unsignedchar,unsignedchar);
//定时器、中断初始化
IE=0x00;
TMOD=0x01;
TH0=RELOAD_HIGH;
TL0=RELOAD_LOW;
//启动定时器
TR0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(~KEY0)
ms=0;
IE=0x82;
if(~KEY1)
IE=0x00;
display(ledca[ms%10],7);
display(ledca[ms/10],6);
display(ledca[sec%10],5);
display(ledca[sec/10],4);
display(ledca[min%10],3);
display(ledca[min/10],2);
display(ledca[hr%10],1);
display(ledca[hr/10],0);
unsignedinti,j;
j<
j++)
i<
123;
i++)
//LED显示,第1个参数为显示数据,第2个为显示位置
voiddisplay(unsignedchardat,unsignedcharpos)
POSPIN=posca[pos];
DATPIN=dat;
delayms(5);
POSPIN=0x00;
//定时中断处理函数
voidtimer0()interrupt1
t++;
if(t==2)
ms++;
t=0;
if(ms==10)
sec++;
if(sec==60)
{
min++;
sec=0;
if(min==60)
{
hr++;
min=0;
if(hr==24)
{
hr=0;
}
}
#defineDATPINP0//IO口定义
#definePOSPINP2//IO口定义
sbitKEYS=P3^0;
//按键定义
unsignedcharms,cy;
//最小计时单位、频率进位
unsignedcharcodeledca[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//unsignedcharcodeposca[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsignedcharcodeposca[]={0X80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
voiddelayms(unsignedintt);
//毫秒延时
voiddisplay(unsignedchardat,unsignedcharpos);
unsignedchari,wei,chr[8];
//循环变量、位数、显示字符串
unsignedlongfreq;
//频率数
IE=0x8A;
//T0、T1开中断
TMOD=0x51;
//T0定时器、T1计数器
TH0=(65536-49999)/256;
//T0初值
TL0=(65536-49999)%256;
if(~KEYS)//按键按下
ms=0;
//计时单位清零
cy=0;
//进位清零
TH1=0;
//T1初值为0
TL1=0;
TR0=1;
//启动定时器
TR1=1;
//启动计数器
//定时器查询中断
if(TF0==1)
{
TH0=(65536-49999)/256;
TL0=(65536-49999)%256;
ms++;
TF0=0;
if(TF1==1)
cy++;
TF1=0;
while(ms<
20);
//等待1秒到
TR1=0;
//停止计数器
TR0=0;
//停止定时器
//计算脉冲数量
freq=cy*65536+TH1*256+TL1;
//将脉冲数转化为字符
chr[i]=freq%10;
freq/=10;
if(freq==0)
wei=i+1;
break;
while(~KEYS);
//等待按键抬起
wei;
display(chr[i],i);
voiddisplay(unsignedchardat,unsignedcharpos)
DATPIN=ledca[dat];
//定时器0中断
TH0=(65536-49991)/256;
TL0=(65536-49991)%256;
ms++;
//计数器1中断
voidtimer1()interrupt3
cy++;
#defineDATPINP0//定义IO口
#definePOSPINP2//定义IO口
sbitKEY0=P3^2;
//定义按键
sbitKEY1=P3^3;
unsignedcharnum0=0,num1=80;
//按键0和1按下次数
unsignedcharcodeledca[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsignedcharcodeposca[]={0x01,0x02,0x04,0x08,0x10,
0x20,0x40,0x80};
//LED显示
IE=0x85;
//外部中断初始化
//IT0=0;
//电平触发
IT1=1;
//边沿触发
IT0=1;
display(num1/10,num0);
display(num1%10,num0+1);
//外部中断1处理函数
voidint1()interrupt2
num1++;
if(num1==100)
num1=0;
voidint0()interrupt0
num0++;
if(num0==7)
num0=0;
}
//num1=0;