1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 单片机定时器和计数器的实验C语言 (单片机原理与应用)定时器/计数器设计实验...

单片机定时器和计数器的实验C语言 (单片机原理与应用)定时器/计数器设计实验...

时间:2022-02-21 19:06:45

相关推荐

单片机定时器和计数器的实验C语言 (单片机原理与应用)定时器/计数器设计实验...

一、实验内容

采用12MHZ时钟频率的单片机,通过一个开关输入,触发定时计数。按下开关10次,计算按键的平均时间,并通过数码管显示出来。

二、实验目的

了解定时器的各种工作方式

掌握定时器/计数器的使用和编程方法

三、实验设备

DELL台式机 、keilC51版本7、proteus版本6

四、实验电路图

五、程序流程图

六、程序源码

#include#include#define uchar unsigned char

#define uint unsigned int

sbit Dot=P0^7;//小数点

sbit P3_5=P3^5;//按钮

uchar Count=0;//循环次数

uchar flag=0;//判断标志

uchar Times=0;

//数码管段码定义

uchar code DSY_CODE[]=

{ 0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90

};

//延时

void DelayMS(uint x)

{

uchar i;

while(--x)for(i=0;i<120;i++);

}

//6只数码管上显示的数字

uchar Digit[]={0,0,0,0,0,0};

void main()

{

uchar i,j;

P0=0xff;

P2=0x00;

P3_5=1;

TMOD=0x01;//设T0为定时方式1

EA=1;ET0=1;//开总控,INT0

TH0=(65536-50000)/256;//设置50ms定时

TL0=(65536-50000)%256;

while(Count!=10){

if(P3_5==1)//开关高电平

{

if(flag==1)//判断标志位

{

flag=0;Count++;//修改标志位,循环次数+1

}

TR0=0;//关中断

}

else if(P3_5==0)//开关低电平

{

flag=1; TR0=1;//修改标志位,关中断

}

}

//显示数码管

while(1)

{

j=0x80;

for(i=0;i<6;i++)

{

j=_crol_(j,1);

P2=j;

P0=DSY_CODE[Digit[i]];

if(i==2)//因为是平均时间,所以小数点左移一位

Dot=0;

DelayMS(2);

}

}

}

void Time0()interrupt 1

{

uchar i;

TH0=(65536-50000)/256;//定时

TL0=(65536-50000)%256;

if((++Times)==2)//50ms*2=0.1s

{

Times=0;

Digit[0]++;//0.1s累加

for(i=0;i<=5;i++)//进位处理

{

if(Digit[i]==10)

{

Digit[i]=0;

if(i!=5)

Digit[i+1]++;

}

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。