您好,欢迎来到华佗养生网。
搜索
您的当前位置:首页STC单片机采集计算瞬时频率和总脉冲数

STC单片机采集计算瞬时频率和总脉冲数

来源:华佗养生网


STC单片机采集计算瞬时频率和总脉冲数

/*******************************************************

STCC58RD+单片机驱动LCD1602液晶显示脉冲数和瞬时频率?

使用外部中断1和定时中断1

*******************************************************/

#include<STCC58.h>

#define uint unsigned int

#define uchar unsigned char

uchar code count[]="01234567";

sbit lcdrs=P4^0;

sbit lcdrw=P3^6;

sbit lcden=P3^7;

uint num,sec,set,n; //num:计算外部中断的总个数;sec:计算瞬时频率;set,n中间变量

/*******************************************************

外部中断

*******************************************************/

void init_tc0()

{

EA=1;

EX0=1;

ET0=1;

IT0=1;

TMOD=0x01;

TH0=0x3c;

TL0=0xaf;

TR0=1;

}

void timer0() interrupt 0 //外部中断

{

num++;

}

/*******************************************************

定时中断

*******************************************************/

void t0() interrupt 1 //定时中断

{

TH0=0x4c;

TL0=0x00;

set++;

if(set==20)

{

set=0;

sec=num-n;

n=num;

}

}

/*******************************************************

延时函数

*******************************************************/

void delay(uint t)

{

uint x,y;

for(x=t;x>0;x--)

{

for(y=112;y>0;y--)

{

}

}

}

/*******************************************************

LCD1602驱动

*******************************************************/

void lcd_wite_com(uchar com)

{

lcdrs=0;

delay(2);

lcdrw=0;

delay(2);

P2=com;

lcden=1;

delay(2);

lcden=0;

}

void lcd_wite_dat(uchar dat)

{

lcdrs=1;

delay(2);

lcdrw=0;

delay(2);

P2=dat;

lcden=1;

delay(2);

lcden=0;

}

void lcd_int()

{

lcd_wite_com(0x38);

lcd_wite_com(0x0f);

lcd_wite_com(0x0c);

//不显示光标(0x06显示光标)0x0c不显示光标

lcd_wite_com(0x01); //清屏

delay(4);

}

void display(uchar x,uchar y,uchar dat) 要显示的数据

{

uchar m;

if(x==1)

{

m=0x40;

}

else

m=0;

m=y|m;

//液晶行和列显示,X:行 Y:列 dat:

lcd_wite_com(0x80+m);

lcd_wite_dat(dat);

}

/*******************************************************

显示总脉冲数 换算

*******************************************************/

void display_num()

{

uchar ge,shi,bai,qian,wan;

ge=num%10;

shi=num%100/10;

bai=num%1000/100;

qian=num%10000/1000;

wan=num%100000/10000;

display(1,8,count[ge]);

delay(1);

display(1,7,count[shi]);

delay(1);

display(1,6,count[bai]);

delay(1);

display(1,5,count[qian]);

delay(1);

display(1,4,count[wan]);

delay(1);

}

/*******************************************************

显示瞬时频率 换算

*******************************************************/

void display_intnum()

{

uchar ge1,shi1,bai1,qian1;

ge1=sec%10;

shi1=sec%100/10;

bai1=sec%1000/100;

qian1=sec%10000/1000;

display(0,8,count[ge1]);

delay(1);

display(0,7,count[shi1]);

del

ay(1);

display(0,6,count[bai1]);

delay(1);

display(0,5,count[qian1]);

delay(1);

}

void main()

{

P0=0;

lcd_int();

init_tc0();

display(0,0,'C');

display(0,1,':');

while(1)

{

display_num();

display_intnum();

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务