实验五定时计数器.docx
- 文档编号:3531087
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:17
- 大小:41.53KB
实验五定时计数器.docx
《实验五定时计数器.docx》由会员分享,可在线阅读,更多相关《实验五定时计数器.docx(17页珍藏版)》请在冰豆网上搜索。
实验五定时计数器
实验五定时/计数器应用实验
一、实验目的
1、通过实验掌握定时/计数器工作原理;
2、通过实验掌握定时/计数器中断的特殊功能寄存器设置;
二、实验内容
1、根据计数器应用电路图图1-7编写程序,将P3.0口置为低电平,矩阵按键中的K0和K4变为定时计数器T0和T1的输入端。
由P1口控制的八个LED,初始状态八个LED的状态为LED0→LED7逐个移位循环点亮(每一时刻只有一个点亮,循环方向不变);应用T0的计数功能,实现按下3次K0实现循环方向改变一次,无论哪个LEDx正在被点亮,都从该位LEDx开始反向循环点亮。
2、在第1题的基础上增加K4和T1的功能,应用T1的计数功能实现按下4次K4实现循环方向改变一次,无论哪个LEDx正在被点亮,都从该位LEDx开始反向循环点亮。
3、根据定时计数器控制流水灯电路图图1-8编写程序,将动态显示模块的KH左列由上到下的第5、6两个插针用短路套短接(将P3.4和P3.5短接),设置T0为定时器在P3.4引脚产生一个周期为100毫秒的方波,设置T1为计数器,每十个下降沿产生一次中断。
由P1口控制的八个LED,初始状态八个LED的状态全灭,每产生一次T1计数中断,点亮一个ledx,方向为LED0→LED7(每一时刻只有一个点亮,循环方向不变),即一秒钟移动一次。
4、根据定时计数器控制动态显示电路图图1-9编写一个P0口控制段选信号和P2口的高四位控制位选信号的四位数码管动态显示程序,不使用延时程序,必须使用定时计数器的中断,显示内容“1234”。
5、自己编写程序,设计数码管动态显示和定时计数器的创意实验,可以增加连接线。
注意:
调整适当的延时时间,不使用定时计数器中断不算完成。
图1-7计数器应用电路图
图1-8定时计数器控制流水灯电路图
图1-9定时计数器控制动态显示电路图
评分表
序号
评分项目
分值
评分
备注
1
完成1题
15
1、电路图的理解
2、LED点亮的延时
3、定时计数器的设置
4、定时计数器中断函数的编写
2
完成2题
15
1、LED点亮的延时和循环
2、定时计数器中断的设置
3、定时计数器中断函数的编写
3
完成3题
30
1、LED点亮的延时和循环
2、定时计数器中断的设置
3、定时计数器中断函数的编写
4
完成4题
20
1、电路图的理解
2、动态显示准确
3、定时计数器中断的设置
4、定时计数器中断函数的编写
5
完成5题
20
6
独立完成实验,如有抄袭、拷贝及其他非独立完成实验的方法以上的所有分值为零
-100
第一个#include
#defineuintunsignedint
#defineucharunsignedchar
sbitgnd=P3^0;
uchartemp;
uchari,j;
bitk=0;
//////////////////////////////
voiddelay_ms(uintt)
{
uchari;
while(t--)
{
for(i=0;i<110;i++)
{;;}
}
}
///////////////////////////////
voidinit()
{
TMOD=0x05;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
ET0=1;
TR0=1;
EA=1;
gnd=0;
}
///////////////////////////////
voidINT0_1(void)interrupt1
{
if(T0==0)
{
delay_ms(10);
if(T0==0)
{
j++;
if(j==3)
{
k=~k;
j=0;
}
TH0=(65536-1)/256;
TL0=(65536-1)%256;
}
}
else
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
}
}
///////////////////////////////
voidmain()
{
init();
while
(1)
{
P1=0xff;
if(k==0)
{temp=0x80;}
if(k==1)
{temp=0x01;}
for(i=0;i<8;i++)
{
P1=~temp;
if(k==0)
{temp=temp>>1;}
if(k==1)
{temp=temp<<1;}
delay_ms(500);
}
}
}
第二个#include
#defineuintunsignedint
#defineucharunsignedchar
sbitgnd=P3^0;
uchartemp;
uchari,j,l;
bitk=0;
//////////////////////////////
voiddelay_ms(uintt)
{
uchari;
while(t--)
{
for(i=0;i<110;i++)
{;;}
}
}
///////////////////////////////
voidinit()
{
TMOD=0x55;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
TH1=(65536-1)/256;
TL1=(65536-1)%256;
ET1=1;
TR1=1;
ET0=1;
TR0=1;
EA=1;
gnd=0;
}
///////////////////////////////
voidtimer_0(void)interrupt1
{
if(T0==0)
{
delay_ms(10);
if(T0==0)
{
j++;
if(j==3)
{
k=~k;
j=0;
}
TH0=(65536-1)/256;
TL0=(65536-1)%256;
}
}
else
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
}
}
///////////////////////////////
voidtimer_1(void)interrupt3
{
if(T1==0)
{
delay_ms(10);
if(T1==0)
{
l++;
if(l==4)
{
k=~k;
l=0;
}
TH1=(65536-1)/256;
TL1=(65536-1)%256;
}
}
else
{
TH1=(65536-1)/256;
TL1=(65536-1)%256;
}
}
///////////////////////////////
voidmain()
{
init();
while
(1)
{
P1=0xff;
if(k==0)
{temp=0x80;}
if(k==1)
{temp=0x01;}
for(i=0;i<8;i++)
{
P1=~temp;
if(k==0)
{temp=temp>>1;}
if(k==1)
{temp=temp<<1;}
delay_ms(500);
}
}
}
第三个#include
#defineuintunsignedint
#defineucharunsignedchar
uchartemp,count;
uchari;
///////////////////////////////
voidinit()
{
TMOD=0x51;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=(65536-10)/256;
TL1=(65536-10)%256;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
EA=1;
}
///////////////////////////////
voidtimer_0(void)interrupt1
{
count++;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
if(count==5)
{
T0=~T0;
count=0;
}
}
///////////////////////////////
voidtimer_1(void)interrupt3
{
uchari;
i++;
TH1=(65536-10)/256;
TL1=(65536-10)%256;
P1=~temp;
temp=temp<<1;
if(i==8)
{
temp=0x01;
i=0;
}
}
///////////////////////////////
voidmain()
{
init();
P1=0xff;
temp=0x01;
while
(1);
}
第四个#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodeduan[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
ucharcodewei[]={0xef,0xdf,0xbf,0x7f};
///////////////////////////////
voidinit()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1;
TR0=1;
EA=1;
}
///////////////////////////////
voidtimer_0(void)interrupt1
{
ucharcount;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
P0=duan[count+1];
P2=wei[count];
count++;
if(count==4)
{count=0;}
}
///////////////////////////////
voidmain()
{
init();
while
(1);
}
第五个#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodeduan[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
ucharcodewei[]={0xef,0xdf,0xbf,0x7f};
ucharnum[4];
ucharsum;
charsum1=60;
ucharsec,min;
ucharcount,i;
bitkey0=0;
bitkey4=0;
sbitgnd=P3^0;
voidBcd(uintnumber);
voidkey();
///////////////////////////////
voidinit()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1;
TR0=1;
EA=1;
gnd=0;
}
///////////////////////////////
voidkey()
{
if(T0==0)
{
while(T0==0);
key0=~key0;
}
if(T1==0)
{
while(T1==0);
key4=~key4;
}
}
///////////////////////////////
voidtimer_0(void)interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
key();
if(key0==0)
{
if(key4==0)
{
count++;
if(count==200)
{
sec++;
count=0;
}
if(sec==60)
{
min++;
sec=0;
}
if(min==60)
{
min=0;
}
sum=min*100+sec;
}
else
{;;}
Bcd(sum);
if(i==1)
{P0=(duan[num[i]]&0x7f);}
else
{P0=duan[num[i]];}
P2=wei[i];
i++;
if(i==4)
{i=0;}
}
else
{
if(key4==0)
{
count++;
if(count==200)
{
sum1--;
count=0;
if(sum1<0)
{sum1=60;}
}
}
Bcd(sum1);
if(i==1)
{P0=(duan[num[i]]&0x7f);}
else
{P0=duan[num[i]];}
P2=wei[i];
i++;
if(i==4)
{i=0;}
}
}
///////////////////////////////
voidBcd(uintnumber)
{
num[0]=number/1000;
num[1]=(number%1000)/100;
num[2]=((number%1000)%100)/10;
num[3]=((number%1000)%100)%10;
}
///////////////////////////////
voidmain()
{
init();
while
(1);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 定时 计数器