C语言频率计程序,我的单片机课程设计频率计,含C语言程序、仿真图和原理图等...

#include

#include

#define uint unsigned int

#define uchar unsigned char

uchar m=0;

uchar u;

uint i;

uint x;

uint c;                  //相位数据结果保存

float t0,f;

uint a[]={70,61,48,48,48,48,48,46,48,48,72,90};          //频率数据结果保存

//F,=,0,0,0,0,0,.,0,0,H,Z

sbit lcdrw=P2^1;

sbit lcdrs=P2^0;

sbit lcden=P2^2;

/LCD1602的设置//

void delay(uint s)//延时1MS

{

uint r,g;

for(r=s;r>0;r--)

for(g=110;g>0;g--);

}

void write_com(uchar com) // 写指令

{

lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar date) // 写数据

{

lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void initlcd()//初始化

{

lcdrw=0;

lcden=0;

//write_com(0x01);//显示清屏

write_com(0x38);//显示模式设置

write_com(0x0c); //显示开,开游标,不闪烁

write_com(0x06); // 字符时整体不移动

}

LCD1602设置///

///定时器的设置//

void CT_init()                 //定时计数器初始化

{        TMOD=0x99;             //GATE=1,T1、T0工作在方式1,定时方式

TH0=0;                         //定时计数器初值清零

TL0=0;

//        TH1=0;

//        TL1=0;

TR0=1;                         //TR0,TR1置位,此时定时计数器的启动有INT0,INT1引脚电平决定

//        TR1=1;

ET0=1;                         //开中断

//        ET1=1;

}

void ITC0() interrupt 0   //外部中断0服务程序

{

u=m;                                  //读定时计数器0溢出次数

m=0;                                  //溢出次数清零

x=TH0*256+TL0;                  //读定时计数器0当前值

TH0=0;                                  //定时计数器0清零

TL0=0;

}

void TIME0() interrupt 1  //定时计数器0溢出中断

{

m++;                                  //溢出次数加1

}

定时器的设置//

void main()

{

initlcd();                          //液晶显示初始化

CT_init();                          //定时计数器初始化

EA=1;                                  //开总中断

EX0=1;                                  //允许外部中断

//        EX1=1;

IT0=1;                                  //设置外部中断方式为下降沿触发

//        IT1=1;

P3=0xff;

while(1)

{

t0=u*65536+x;                                   //计算脉冲时间宽度

f=1000000/(2*t0);                           //计算频率

c=f*100;                                           //计算结果逐位保存

a[9]=c%10+48;

a[8]=(c/10)%10+48;

c=f;

a[6]=c%10+48;

a[5]=(c/10)%10+48;

a[4]=(c/100)%10+48;

a[3]=(c/1000)%10+48;

a[2]=(c/10000)%10+48;

write_com(0x80);

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

{

write_data(a[i]);

delay(10);

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值