找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的频率计,亲测能用

[复制链接]
跳转到指定楼层
楼主
ID:284667 发表于 2019-1-19 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit rw=P2^5;//一下三行是设置lcd1602的使能端
sbit rs=P2^6;
sbit ep=P2^7;
typedef bit BOOL;
uchar t,A1,A2,A3,A4,A5,A6,Flag=0,count,H,L;
void delay(uchar ms) //延时
{
  uchar i;
  while(ms--)                       
  for(i=0;i<100;i++);
}
BOOL lcd_bz()//测试lcd忙碌状态返回值为布尔型数值真或假'1'.'0'  
{
  BOOL result;
  rs=0;           // 读忙信号
  rw=1;
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  result=(BOOL)(P0&0x80);
  ep=0;
  return(result) ;
}     
void write_cmd(uchar cmd)//写指令
{
  while (lcd_bz());
  rs=0;
  rw=0;
  ep=0;
  _nop_();
  _nop_();
  P0=cmd ;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=0;
}
void write_addr(uchar addr)//写地址
{
  write_cmd(addr|0x80);//LCD第一行的首地址为0x80第二行的首地址为0x80+0x40=0xc0
}
void write_byte(uchar dat) //写字节
{
   while (lcd_bz());
  rs=1;
  rw=0;
  ep=0;
  _nop_();
  _nop_();
  P0=dat ;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=0;
}
void lcd_init() //lcd初始化

{

  write_cmd(0x38);//设置LCD两行显示一个数据由5*7点阵表示,数据由8跟线传输

  write_cmd(0x0c);//清除屏幕显示

  write_cmd(0x06);//设定输入方式增量不移位

  write_cmd(0x01);//开整体显示关光标不闪烁

}

void display(uchar addr,uchar q)//在某一地址上显示内容adder表示的是地址偏移量q表示显示的字符或数字
{

  write_addr(addr);

  write_byte(q);

  delay(1);//修改此时间可以改变LCD上数值跳变的数度

}
void init()
{
        TMOD = 0x51;
        TH0 = (65535-45872)/256;
        TL0 = (65535-45872)%256;
        TH1 = 0x00;
        TL1 = 0x00;
        ET0 = 1;
        ET1 = 1;
        EA = 1;
        TR0 = 1;
        TR1 = 1;
}
void Time0() interrupt 1
{
        TL0 = 0x00;
        TH0 = 0x4c;
        t++;
        if (t == 20)
        {
                TR0 = 0;
                TR1 = 0;
                t = 0;
                Flag = 1;
        }
}
void Time1() interrupt 3
{
        count++;
}
void main()
{
                unsigned long x;
                P3 = 0xFF;
                init();
                lcd_init();
                while (1)
                {
                        if (Flag)
                        {
                                H = TH1;
                                L = TL1;
                                x = ((count*65535)+(H*256)+L);
                                A1=x/100000;
                                A2=x%100000/10000;
                                A3=x%10000/1000;
                                A4=x%1000/100;
                                A5=x%100/10;
                                A6=x%10;
                                Flag = 0;
                                count = 0;
                                TH1 = 0x00;
                                TL1 = 0x00;
                                TH0 = (65535-45872)/256;
                                TL0 = (65535-45872)%256;
                                TR1 = 1;
                                TR0 = 1;
                        }
                        display(0x00,A1+0x30);
                        display(0x01,A2+0x30);
                        display(0x02,A3+0x30);
                        display(0x03,A4+0x30);
                        display(0x04,A5+0x30);
                        display(0x05,A6+0x30);
                }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-1-19 13:45 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:149799 发表于 2019-2-13 11:40 | 只看该作者
期待楼主补全资料,谢谢。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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