由STC12C5A50S2与NOKIA1100液晶屏构成的袖珍示波器

发布者:Volare最新更新时间:2015-06-16 来源: 51hei关键字:STC12C5A50S2  NOKIA1100  液晶屏  袖珍示波器 手机看文章 扫描二维码
随时随地手机看文章
     由STC12C5A50S2与NOKIA1100液晶屏构成的袖珍示波器,功能简介:可测量双通道波形,采样率从75KHz到15Hz,输入电压应该能到50V(本人没有测试过较高的电压)。

 


 

 

        主要器件:手机电池供电,PT1301升压到5V,以TL431输出的2.5V为探头的信号地,运放TL082做信号放大,数字电位器MCP41010做增益调节,NOKIA1100液晶屏做为显示,96*65像素点,其工作所需3.3V电压是5V电压串联LED后得来的。STC12C5A50S2做为核心控制,据资料介绍其ADC采样速度可达250KHz,两路ADC采集波形数据,一路ADC采集2.5V电压,一路ADC采集电池电压,两路PWM经低通滤波后控制调理电路的偏移。探头接口是用的双声道耳机接口,比较节省空间,但是通道间会有干扰。按键有9个,CH:选通道; Vp/Hp:主菜单选择:POWER:开机;Vs/Hs:(本程序未用)        INC:+ ,STOP:关机 SET:进弹出菜单     DEC:-   ESC:退出/暂停
        程序介绍:
        程序中为了方便图形操作,为液晶屏建立了内存缓冲,绘图操做在单片机内存中进行,然后整体复制到液晶屏.由于内存不太充裕,采用了分块的方法,以时间换取空间:
#define LCD_WIDTH 96
#define LCD_HEIGHT 8
//液晶分区数
#define LCD_PART 2
//U8 lcd_x=0;
//U8 lcd_y=0;
xdata U8 lcd_buf[LCD_HEIGHT/LCD_PART][LCD_WIDTH];//lcd显示缓存(1/LCD_PART屏)
xdata S16 lcd_bufx0=0,lcd_bufy0=0,lcd_bufx1=0,lcd_bufy1=0;//缓冲区对应四角坐标,(去掉右边框)
//x0 <= x < x1;y0 <= y < y1;
//-------------------------------------------------------
//选择液晶屏区域
//s=0~LCD_PART-1
//-------------------------------------------------------
void lcd_buf_sel(U8 s)
{
        if(s>=LCD_PART)return;
        lcd_bufx0=0;
        lcd_bufx1=LCD_WIDTH;
        lcd_bufy0=LCD_HEIGHT*s/LCD_PART;        
        lcd_bufy1=LCD_HEIGHT*(s+1)/LCD_PART;
}

绘图时需遍历每个显示缓存块:
        for(p=0;p         {
                lcd_buf_sel(p);
                //LCD_DrawPic(0,0,160,123,0,gImage_t1);
                lcd_buf_fill(0x04);                
                GUI_SetFont6x8();
                GUI_dispnum(i,3,0,5,13,0);
                GUI_PutStr(5,5,"welcome...");
                GUI_SetFont8x16();
                GUI_PutStr(5,25,"welcome...");
                lcd_refresh();
        }

  程序在timer0中断里采集波形数据,主要代码如下:
//--------------------------------------------------
//定时器中查询AD
//--------------------------------------------------
void timer0(void)        interrupt 1 using 3        //T0中断,用寄存器组0
{
        //while(TF0==0);
        //TF0=0;
        U8 ad;
        //static U8 fp=0;//分频        
        if(T0EXC==0)
        {
                //mmm++;
                TH0=TH0RLD;//重装初值
                TL0=TL0RLD;
                T0EXC=T0EXH;
                //dosamp();
                while(ADC_CONTR&BIT(3));//等待通道0转换完成
                //while(!(ADC_CONTR&BIT(4)));
                ad=ADC_RES;//读通道0
                if(TrigCh==0)//通道1触发
                {
                        if(ChEnable & BIT(1))//通道2使能
                                ADC_CONTR=(0xE8|ADCH2);//选通道2
                        else                //否则选通道1
                                ADC_CONTR=(0xE8|ADCH1);//选通道1
                        ADCBuf[0][BUF_Wps]=ad;//循环存储数据
                }
                else
                {
                        if(ChEnable & BIT(0))//通道1使能
                                ADC_CONTR=(0xE8|ADCH1);//选通道1
                        else                //否则选通道1
                                ADC_CONTR=(0xE8|ADCH2);//选通道2
                        ADCBuf[1][BUF_Wps]=ad;//循环存储数据                
                }
                [page]
                
                //if(BUF_Wps>=ADCBUFSIZE)BUF_Wps=0;
                if(SampState==0)//预采数据
                {
                        //if(ADC_Cnt                         ADC_Cnt++;        //数据个数加1
                        BUF_Cnt++;
                        if(ADC_Cnt>=TrigPs)//触发位置
                        {
                                if(TrigEdge==0)//上升沿触发
                                        SampState=1;
                                else                        //下降沿触发
                                        SampState=2;
                        }
                }
                //------------------------上升沿状态为1-2-3,下降沿状态为2-1-3
                else if(SampState==1)
                {                        
                        if(ad<=TrigLevel)//低于触发电平
                        {
                                if(TrigEdge==0)//上升沿触发
                                        SampState=2;
                                else                        //下降沿触发
                                        SampState=3;
                                //if(ADC_Cnt                                 ADC_Cnt++;//数据个数加1
                                BUF_Cnt++;
                        }
                        else//否则读取队列,ADC_Cnt,BUF_Cnt就不加了
                        {
                                BUF_Rps++;
                                if(BUF_Rps>=ADCBUFSIZE)BUF_Rps=0;
                        }
                }
                else if(SampState==2)
                {
                        if(ad>TrigLevel)//高于触发电平
                        {
                                if(TrigEdge==0)//上升沿触发
                                        SampState=3;
                                else                        //下降沿触发
                                        SampState=1;
                                //if(ADC_Cnt                                 ADC_Cnt++;//数据个数加1
                                BUF_Cnt++;
                        }
                        else//否则读取队列,ADC_Cnt,BUF_Cnt就不加了
                        {
                                BUF_Rps++;
                                if(BUF_Rps>=ADCBUFSIZE)BUF_Rps=0;
                        }
                }
                else if(SampState==3)//已触发
                {
                        ADC_Cnt++;        //数据个数加1
                        BUF_Cnt++;
                        if(ADC_Cnt>=ADCBUFSIZE)//采了足够的数据
                        {
                                SampState=4;
                                TR0=0;
                        }
                }
                if((TrigMode==0)&&(SampState<3))//自动触发处理
                {                
                        if(TrigWait==0)//等待时间低位
                        {
                                if(TrigWaitH)//等待时间高位
                                {
                                        TrigWaitH--;
                                }
                                else
                                {
                                        SampState=3;
                                }
                        }
                        TrigWait--;
                }
                if(TrigCh==0)//通道1触发
                {
                        if(ChEnable & BIT(1))//通道2使能        
                        {
                                while(ADC_CONTR&BIT(3));//等待通道1转换完成
                                //while(!(ADC_CONTR&BIT(4)));
                                ad=ADC_RES;//读通道1
                                ADC_CONTR=(0xE8|ADCH1);//选通道1
                                ADCBuf[1][BUF_Wps]=ad;//循环存储数据
                        }
                }
                else
                {
                        if(ChEnable & BIT(0))//通道1使能        
                        {
                                while(ADC_CONTR&BIT(3));//等待通道1转换完成
                                //while(!(ADC_CONTR&BIT(4)));
                                ad=ADC_RES;//读通道1
                                ADC_CONTR=(0xE8|ADCH2);//选通道2
                                ADCBuf[0][BUF_Wps]=ad;//循环存储数据
                        }                
                }
                //写指针下移
                BUF_Wps++;
                if(BUF_Wps>=ADCBUFSIZE)BUF_Wps=0;
        }
        else
        {
                T0EXC--;
        }
}
关键字:STC12C5A50S2  NOKIA1100  液晶屏  袖珍示波器 引用地址:由STC12C5A50S2与NOKIA1100液晶屏构成的袖珍示波器

上一篇:一个改进型的4*4矩阵键盘扫描
下一篇:八路直控键盘控制数码显示

推荐阅读最新更新时间:2024-03-16 14:04

604液晶屏输入输出C51源程序
#include STRING.H #include INC\LCD1604.H sfr LCD_INTER = 0x80; //数据总线接口 sbit LCDBUSY=LCD_INTER^7; //标志位 sfr LCD_CONTROL = 0xA0; //数据总线接口 sbit LCDRS=LCD_CONTROL^0; //数据、指令选择 sbit LCDRW=LCD_CONTROL^1; //读写选择 sbit LCDE =LCD_CONTROL^2; //使能 /******************************自定义字符*******************************/ u
[单片机]
UCLA研究人员研制出以自然光发电的液晶屏
位于洛杉矶的加利福尼亚大学的研究人员们称他们研制出一种新科技能让设备利用自然光发电。 研究人员们将这种液晶显示器科技称为两级有机光伏液晶显示器,它是一种可以将自然光转换成能源的设备,甚至是普通液晶显示器发出的无用光也可以用来启动设备。 UCLA新闻中心的报道称,这种新科技是由工程学院的科学家HenrySamueli所研发出来的,应用于光伏偏振器上。 一个光伏偏振器可以用于一个设备的液晶显示屏上,这样可以让屏幕捕捉到自然光让后将之转换为能量。 报道称,“UCLA的工程师们为电子设备创造了一种全新的能量循环模式,包括装备的内置光伏偏振器的液晶显示屏,它能将环境光,太阳光合和其自身的背光源转化为电能。”这种新技术能将普通液晶显示屏所流失
[新能源]
基于MCU的新型改善液晶屏极化驱动电路设计
引言 一些面板由于设计和工艺等原因,存在着液晶分子特性易遭破坏等问题,所以在设计驱动液晶面板的驱动电路时需要增加特殊的功能电路,来实现液晶分子偏转方向的控制。本文介绍了一种控制液晶显示器像素电压的极性变换的方法,克服了现有技术中由于极性变换信号的单一极性变换规律使得液晶分子的特性容易遭到破坏的问题。 1 系统总体框图 本设计系统的基本单元由时序控制器(T- CON)、微控制单元(MCU)、极性保护电路、液晶面板构成。系统框图如图1 所示。时序控制器是驱动液晶面板的核心器件,它的主要功能是为TFT- LCD 面板中的栅极驱动器和源极驱动器提供必要的时序控制信号。它将接收前端送过来的LVDS(Low Voltage Differ
[单片机]
基于MCU的新型改善<font color='red'>液晶屏</font>极化驱动电路设计
使用MSP430驱动HX8340 TFT液晶屏
#include #define uint unsigned int #define uchar unsigned char #define LCD_RD_SET {P2OUT |= BIT0;} #define LCD_RD_CLR {P2OUT &= ~BIT0;} #define LCD_WR_SET {P2OUT |= BIT1;} #define LCD_WR_CLR {P2OUT &= ~BIT1;} #define LCD_RS_SET {P2OUT |= BIT2;} #define LCD_RS_CLR {P2OUT &= ~BIT2;} #define LCD_CS_SET {P2OUT |= BIT3;} #
[单片机]
重组无果 中国液晶巨头各自展开扩产计划
  最近,日韩液晶屏巨头纷纷联合投资新生产线,中国仅有的几家液晶屏商在重组至今无果的情况下,也各自展开了扩产计划。   2月29日,龙腾光电对外宣布,该公司于2007年向国家发改委提出的二期增资8.7亿美元的申请,近日已获得批准。加上首期6.99亿美元投资,在国内液晶三巨头中,龙腾光电的液晶面板产能将超越上广电和京东方,原本居于“老三”的龙腾一跃成为了国内产能最大的液晶屏企业。    非简单产能扩张   2006年底开始谈判的国内液晶屏三巨头整合,一度是2007年国内消费电子业最热门的话题,但是随着液晶屏行业的回暖和三家企业纷纷盈利,所谓的整合已经名存实亡。   事实上,从一开始,三巨头就各怀心思,月产能只有3万片的龙腾光
[焦点新闻]
英贝德推出全功能评估板配送7寸液晶屏
EBD9263开发板,专为工业测控领域设计。发掘前沿科技,开拓更低成本和功耗的嵌入式产品。以单板机系列产品为基础,英贝德科技精于方案设计和产品定制,与您共同着眼嵌入式产业之未来。 英贝德科技提供完善的技术支持和升级服务,为您的系统保驾护航。 非常适合于工控、医疗产品高性能CPU-AT91SAM9263 为了快速应用,快速评估,特推出AT91SAM9263评估套件 ARM9 240MHz CPU,64MB SDRAM,大容量电子盘,7×UART 10/100Mbps以太网,2×USB Host,1×CAN Bus,8×8 阵列键盘 高分辨率LCD控制器,AC`97音频,CF卡,50×GP
[嵌入式]
英贝德推出全功能评估板配送7寸<font color='red'>液晶屏</font>
谷歌/夏普研发单眼2000万像素VR液晶屏:告别颗粒感
  手机屏幕上到4K分辨率级别后,已经彻底告别了颗粒感。但是在热火朝天的VR设备上,模糊的画面仍旧是普遍的槽点。下面就随嵌入式小半年一起来了解一下相关内容吧。 谷歌/夏普研发单眼2000万像素VR液晶屏:告别颗粒感   Oculus首席科学家亚伯拉什曾表示,希望在2021年前实现单眼4Kx4K级别的理想分辨率,也就是1600万像素。   但在本周的SIDDisplayWeek期间, 谷歌 VR/AR副总裁ClayBavor公布了绝密项目的关键信息,正和 夏普 一起研发单眼2000万像素的微型屏幕,用于增强显示、虚拟显示设备。    谷歌 透露,屏幕材质为LCD液晶,帧率可以达到90~120FPS。   谷歌/夏普研发单
[嵌入式]
日本ORTUSTECH推出全球最小高清液晶屏
  日前,日本ORTUSTECH公司宣布,他们已经成功开发出了全球最小的FullHD高清液晶面板,在4.8寸的尺寸下即可实现1920x1080分辨率。   ORTUS Technoloy公司由日本凸版印刷株式会社和卡西欧合资,今年4月刚刚成立,专门进行中小尺寸显示技术的研发和制造。这块突破性的高清液晶面板基于该公司独有的HAST(Hyper Amorphous Silicon TFT),以a-Si TFT非晶硅液晶面板为基础,通过精细加工技术、液晶配向技术和面板驱动技术上的改进,实现高分辨率、高开口率。   这块4.8寸1920x1080分辨率面板的像素密度已经达到458ppi,比苹果“Retina”视网膜屏幕的327pp
[家用电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved