找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3036|回复: 2
打印 上一主题 下一主题
收起左侧

关于C51单片机频率计的程序问题

[复制链接]
跳转到指定楼层
楼主
总是报错,也不知道哪里出错。
  • #include<reg51.h>
  • #include<math.h>
  • #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);
  •                 }
  •          }
  • }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2017-5-21 16:58 | 只看该作者
报的什么错?
回复

使用道具 举报

板凳
ID:111634 发表于 2017-5-21 17:59 | 只看该作者
本帖最后由 zl2168 于 2017-5-21 18:08 编辑

实例73  测量脉冲频率
Proteus仿真一下,确认有效
实例73 测量脉冲频率.rar (52.74 KB, 下载次数: 9)

以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表