单片机脉冲计数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机实验报告

班级:自动0903

姓名:

一.软件实验

实验题目:脉冲计数(定时/计数器实验)

1,实验目的:熟悉单片机内部定时/计数器功能,掌握初始化编程方法。

2,实验内容:把外部中断0输入的脉冲进行计数,并送数码管显示。

仿真电路图如下所示:设定频率发生器为50Hz

程序如下:

#include

sbit P2_0=P2^0; //数码管选定位

sbit P2_1=P2^1;

sbit P2_2=P2^2;

sbit P2_3=P2^3;

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; unsigned int motorspeed;

unsigned char GE,SHI,BAI,QIAN;

unsigned int counter=0; //脉冲数

unsigned int calsp; //设定多长时间计算一次

void display(); //数码管显示

void delay(); //延迟函数

void calspeed();

void main()

{

EA=1; //开启总中断

EX0=1; //开启外部中断0

IT0=1; //设置成下降沿触发方式

TMOD=0x01; //设置定时器0为模式1,即16位计数模式

TH0=(65536-10000)/256; //计数时间为10ms

TL0=(65536-10000)%256;

ET0=1; //开启定时器0中断

TR0=1; //启动定时器0

P2=P2&0xf0;

while(1)

{

display();

calspeed();

}

}

void calspeed()

{

if(calsp>=100) //100*10ms=1s计算一次

{

motorspeed=counter;

counter=0; //清零脉冲数

calsp=0; //清零标志

}

}

void _TIMER0() interrupt 1

{

TH0=(65536-10000)/256; //重新装入初值,计数时间为10ms TL0=(65536-10000)%256;

calsp++;

}

void _INT0() interrupt 0

{

counter++;

}

void display() //数码管显示函数{

GE=motorspeed%10;

SHI=motorspeed/10%10;

BAI=motorspeed/100%10;

QIAN=motorspeed/1000%10;

P2_0=1;

P0=table[QIAN];

delay();

P2_0=0;

P2_1=1;

P0=table[BAI];

delay();

P2_1=0;

P2_2=1;

P0=table[SHI];

delay();

P2_2=0;

P2_3=1;

P0=table[GE];

delay();

P2_3=0;

}

void delay() //延迟函数

{

unsigned char i=10;

while(i--)

;

}

二.硬件实验

实验题目:用单片机控制二极管

1,实验目的:熟悉用单片机控制二极管及其编程方法2,实验内容:跑马灯显示二极管

仿真电路图如下所示:

程序如下:

#include

#include

void delay();//延时子函数

void main(void)

{

unsigned char temp;

temp=0xfe;

while(1)

{

P2=temp;

delay();

temp=_crol_(temp,1);

}

}

void delay()

{

unsigned int y;

y=10000;

while(y--)

;

}

相关文档
最新文档