找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

基于AVR单片机的低成本lcd示波器制作

查看数: 8067 | 评论数: 16 | 收藏 5
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-12-17 01:20

正文摘要:

回复

ID:134692 发表于 2017-1-17 23:24

先收藏,好东西一定要收藏,  慢慢有时间再弄个学习
ID:106211 发表于 2016-3-27 16:57
先收藏,好东西一定要收藏,  慢慢有时间再弄个学习
ID:61140 发表于 2015-10-13 06:06
太有才了,正学习中,有空我也做一个玩一下
ID:91806 发表于 2015-10-7 17:08
不成功,有错误
ID:89420 发表于 2015-9-23 03:46
想做个矢量画图的....
ID:82588 发表于 2015-7-3 11:18
先收藏,好东西一定要收藏,  慢慢消化 一个个都来一个看看啥样子,顶起
ID:73679 发表于 2015-7-2 20:44
仿制一个不成功,按键无效
ID:73562 发表于 2015-6-28 17:07
也想自己动手做一个
ID:74303 发表于 2015-4-4 23:55
好东西
ID:73625 发表于 2015-2-13 22:38
用STC12C2052AD单片机制作的0-99V数字电压表
ID:19120 发表于 2015-1-29 11:28
好资料,谢谢分享
ID:72881 发表于 2015-1-27 20:04
大家注意一个问题就可以了,被测频率的最高值为晶振值除以24,如果是12M晶振,只能测到500K,如果想测量更高的程序,可以考虑分频了,常用器件是74HC390或者是74LS390,看你的频率了,当让,加74HC74或者LS74可以把频率降低一倍。

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define unit unsigned int
#define ulong unsigned long
typedef bit BOOL ;
uchar T0count=0;//T0计数
ulong f;
uchar temp[6]={0};
bit flag;
sbit rs = P2^7;  
sbit rw = P2^6;
sbit ep = P2^5;
sbit L = P2^0;    //背光
sbit key1 = P2^1;    //
sbit key2 = P2^2;    //
sbit k0 = P1^0;    //
sbit k1 = P1^1;    //
sbit k2 = P1^2;    //
uchar code dis1[] = {" CRB L/C Meter "};
uchar code dis2[] = {"    2009-08-01    "};
delay(unit ms)
{         // 延时子程序
uchar i;
while(ms--)
{
      for(i = 0; i< 250; i++)
    {_nop_();_nop_();_nop_();_nop_();}
}
}
BOOL lcd_bz()
{         // 测试LCD忙碌状态
BOOL result;
rs = 0; rw = 1; ep = 1;
_nop_();_nop_();_nop_();_nop_();
result = (BOOL)(P0 & 0x80);
ep = 0;
return result;
}
lcd_wcmd(uchar cmd)
{         // 写入指令数据到LCD
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;  
}
lcd_pos(uchar pos)
{         //设定显示位置
lcd_wcmd(pos | 0x80);
}
lcd_wdat(uchar dat)
{         //写入字符显示数据到LCD
while(lcd_bz());
rs = 1;rw = 0;ep = 0;
P0 = dat;
_nop_();_nop_(); _nop_();_nop_();
ep = 1;
_nop_();_nop_();_nop_();_nop_();
ep = 0;
}
lcd_init()
{         //LCD初始化设定
lcd_wcmd(0x38);     //
delay(1);
lcd_wcmd(0x0c);     //
delay(1);
lcd_wcmd(0x06);     //
delay(1);
lcd_wcmd(0x01);     //清除LCD的显示内容
delay(1);
}
void dis(void)
{
f=T0count*65536+TH0*256+TL0; //计算0.05秒内的脉冲次数
f=f*20;
     temp[0]=f/100000+0x30;
temp[1]=f%100000/10000+0x30;
temp[2]=f%100000%10000/1000+0x30;
temp[3]=f%100000%10000%1000/100+0x30;
temp[4]=f%100000%10000%1000%100/10+0x30;
temp[5]=f%100000%10000%1000%100%10+0x30;
}
main()
{
     uchar i;
TMOD=0x15; //T1定时,T0计数 16位定时计数器

     TH0=0;TL0=0;
TH1=(65536-50000)/256;TL1=(65536-50000)%256;      //定时为0.05S      

TR1=1;TR0=1;
ET0=1;ET1=1;
EA=1;
    //k2=0;
lcd_init();      // 初始化LCD   
delay(10);
lcd_pos(0);      // 设置显示位置
i = 0;
     L=0;
P1=0xff;
while(dis1[i] != '\0')
{        // 显示字符
    lcd_wdat(dis1[i]);
    i++;
}
lcd_pos(0x40);     // 设置显示位置为
i = 0;
while(dis2[i] != '\0')
{
    lcd_wdat(dis2[i]); // 显示字符"
    i++;
}
lcd_wcmd(0x01);
while(1)      //
{
if(flag==1)
    {
      dis();                       
    lcd_pos(0x80);     // 设置显示位置
      lcd_wdat('-');
         for(i=0;i<=5;i++)
          lcd_wdat(temp[i]); // 显示字符
    lcd_wdat('-');
      flag=0;
    T0count=0;
    TH0=0;TL0=0;
    TR0=1;TR1=1;
}
}
}


void t0(void) interrupt 1 using 1 //T0工作在计数状态下,T0(P3.4)
{
     T0count++; //T0count中断次数
}
void t1(void) interrupt 3 using 2 //T1工作在定时状态下,
{
     TR0=0;TR1=0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
flag=1;
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

ID:65707 发表于 2015-1-25 23:31
这个真的行吗,最高能达到多少M
ID:68013 发表于 2015-1-23 23:24
谢谢分享,收藏了
ID:70666 发表于 2014-12-18 09:29
     新来的,M币不够下载用,有啥办法吗?

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

Powered by 单片机教程网

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