找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13626|回复: 21
收起左侧

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

  [复制链接]
ID:120916 发表于 2016-5-15 12:23 | 显示全部楼层 |阅读模式
本设计提出了一种基于AT89C51单片机开发的数字频率计测量仪的设计。系统以单片机AT89C51为核心,构成了完备的测量系统。可以对信号进行频率的精确测量,测频在1KHz到100KHz。采用液晶LCD1602显示被测信号的频率。与传统的电路系统相比,其有处理速度快、稳定性高、性价比高、硬件结构简单的优点。
(1)能测量频率范围为10HZ-100KHZ,,要求用液晶显示器显示测量结果。
(2)被测信号可以是正弦波、三角波、方波,幅值300mV-3V。
(3)具有超量程警告(可以是LED灯显示,也可以用蜂鸣器报警)。
(4)当测量脉冲信号时,能显示其占空比
0.png
单片机课设频率计的仿真图

程序源码如下:
  1. #include<reg51.h>      
  2. #include<math.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar m=0;
  6. uchar u;
  7. uint i;
  8. uint x;
  9. uint c;                  //相位数据结果保存
  10. float t0,f;
  11. uint a[]={70,61,48,48,48,48,48,46,48,48,72,90};          //频率数据结果保存
  12.                 //F,=,0,0,0,0,0,.,0,0,H,Z
  13. sbit lcdrw=P2^1;
  14. sbit lcdrs=P2^0;
  15. sbit lcden=P2^2;
  16. /////////////////LCD1602的设置//////////////////////////////////
  17. void delay(uint s)//延时1MS
  18. {
  19.   uint r,g;
  20.    for(r=s;r>0;r--)
  21.      for(g=110;g>0;g--);
  22. }
  23. void write_com(uchar com) // 写指令
  24. {  
  25.    lcdrs=0;
  26.    P0=com;
  27.    delay(5);
  28.    lcden=1;
  29.    delay(5);
  30.    lcden=0;       
  31. }
  32. void write_data(uchar date) // 写数据
  33. {  
  34.    lcdrs=1;
  35.    P0=date;
  36.    delay(5);
  37.    lcden=1;
  38.    delay(5);
  39.    lcden=0;       
  40. }
  41. void initlcd()//初始化
  42. {
  43.   lcdrw=0;
  44.   lcden=0;
  45. //write_com(0x01);//显示清屏
  46.   write_com(0x38);//显示模式设置
  47.   write_com(0x0c); //显示开,开游标,不闪烁  
  48.   write_com(0x06); // 字符时整体不移动  
  49. }
  50. ////////////LCD1602设置///////////////
  51. ///////////定时器的设置//////////////
  52. void CT_init()                 //定时计数器初始化
  53. {        TMOD=0x99;             //GATE=1,T1、T0工作在方式1,定时方式
  54.         TH0=0;                         //定时计数器初值清零
  55.         TL0=0;
  56. //        TH1=0;
  57. //        TL1=0;
  58.         TR0=1;                         //TR0,TR1置位,此时定时计数器的启动有INT0,INT1引脚电平决定
  59. //        TR1=1;
  60.         ET0=1;                         //开中断
  61. //        ET1=1;
  62. }
  63. void ITC0() interrupt 0   //外部中断0服务程序
  64. {
  65.         u=m;                                  //读定时计数器0溢出次数
  66.         m=0;                                  //溢出次数清零
  67.         x=TH0*256+TL0;                  //读定时计数器0当前值
  68.         TH0=0;                                  //定时计数器0清零
  69.         TL0=0;
  70. }
  71. void TIME0() interrupt 1  //定时计数器0溢出中断
  72. {
  73.         m++;                                  //溢出次数加1
  74. }
  75. ////////////定时器的设置//////////////
  76. void main()
  77. {
  78.         initlcd();                          //液晶显示初始化
  79.     CT_init();                          //定时计数器初始化
  80.         EA=1;                                  //开总中断
  81.         EX0=1;                                  //允许外部中断
  82. //        EX1=1;
  83.         IT0=1;                                  //设置外部中断方式为下降沿触发
  84. //        IT1=1;
  85.         P3=0xff;       
  86.         while(1)
  87. {                                                      
  88.                 t0=u*65536+x;                                   //计算脉冲时间宽度
  89.                 f=1000000/(2*t0);                           //计算频率
  90.                 c=f*100;                                           //计算结果逐位保存
  91.                 a[9]=c%10+48;
  92.                 a[8]=(c/10)%10+48;
  93.                 c=f;
  94.                 a[6]=c%10+48;
  95.                 a[5]=(c/10)%10+48;
  96.                 a[4]=(c/100)%10+48;
  97.                 a[3]=(c/1000)%10+48;
  98.                 a[2]=(c/10000)%10+48;
  99.                 write_com(0x80);
  100.                 for(i=0;i<=11;i++)
  101.                 {  
  102.                         write_data(a[i]);
  103.                         delay(10);
  104.                 }          
  105.          }                       
  106. }  
复制代码



0.png
课程设计的所有资料打包下载:
频率计.zip (6.57 MB, 下载次数: 289)

评分

参与人数 2黑币 +51 收起 理由
Jason-zhang + 1 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:128162 发表于 2016-6-26 13:26 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:130427 发表于 2016-7-27 03:38 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:142169 发表于 2016-10-21 12:14 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:134531 发表于 2016-12-5 23:31 | 显示全部楼层
谢谢楼主分享!!!!!!!!!
回复

使用道具 举报

ID:154424 发表于 2016-12-13 14:18 | 显示全部楼层

谢谢楼主分享!!!!!!!!!
回复

使用道具 举报

ID:198265 发表于 2017-5-10 11:53 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:194345 发表于 2017-5-20 10:28 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:204682 发表于 2017-5-25 13:16 | 显示全部楼层
谢谢我很需要
回复

使用道具 举报

ID:57831 发表于 2017-6-6 23:40 | 显示全部楼层

谢谢分享
回复

使用道具 举报

ID:217743 发表于 2017-7-18 16:56 | 显示全部楼层
为什么我下载后仿真 lcd1602不显示呢
回复

使用道具 举报

ID:253126 发表于 2017-11-24 17:33 | 显示全部楼层
没有protues图
回复

使用道具 举报

ID:252542 发表于 2017-11-25 17:18 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

ID:258138 发表于 2017-12-6 22:05 | 显示全部楼层
感谢楼主的无私
回复

使用道具 举报

ID:301686 发表于 2018-4-4 22:01 | 显示全部楼层
为什么我下了以后仿真没有显示啊
回复

使用道具 举报

ID:294934 发表于 2018-4-10 15:57 | 显示全部楼层
为什么我下载的频率不改变
回复

使用道具 举报

ID:325983 发表于 2018-5-14 22:52 | 显示全部楼层
频率压根不变啊
回复

使用道具 举报

ID:254584 发表于 2018-5-16 21:12 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:245084 发表于 2018-6-23 23:19 | 显示全部楼层
资源没了?

回复

使用道具 举报

ID:360603 发表于 2018-6-27 21:30 | 显示全部楼层
谢谢你!!!
回复

使用道具 举报

ID:364499 发表于 2018-7-4 09:13 | 显示全部楼层
谢谢版主分享
回复

使用道具 举报

ID:365204 发表于 2018-7-10 15:15 | 显示全部楼层
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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