• 大小: 82KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: OLED  0.96  51  

资源简介

给51写的单片机AD采样后在0.96 OLED屏幕上进行波形显示的程序

资源截图

代码片段和文件信息

//****************OLED微型示波器**********************//
//*****************迷梦数码科技***********************//
//**********http://shop108196262.taobao.com***********//
//**********程序编写:7426笨蛋************************//
//**********编写日期:2014年11月***********************//
#include//STC12C5A60S2头文件,没有用到相关寄存器可以用reg51.h代替
#include
#define FOSC    30000000L
#define ADC_POWER   0x80            //ADC power control bit
#define ADC_FLAG    0x10            //ADC complete flag
#define ADC_START   0x08            //ADC start control bit
#define ADC_SPEEDLL 0x00            //420 clocks
#define ADC_SPEEDL  0x20            //280 clocks
#define ADC_SPEEDH  0x40            //140 clocks
#define ADC_SPEEDHH 0x60            //70 clocks
sbit test=P3^1;
void LCD_P16x16Str(unsigned char xunsigned char yunsigned char ch[]);
extern unsigned char code logo_bmp[];
extern unsigned char code coordinate_bmp[];
unsigned int newtimeoldtimelengthfreq;
void delay(int ms) //延时程序
{
   int iijj;
   if (ms<1) ms=1;
   for(ii=0;ii   for(jj=0;jj<500;jj++);  
       

void InitADC()
{
    P1ASF = 0x01;                   //选择P1^0作为AD输入口
    ADC_RES = 0;                    //清除转换结果
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | 0;
    delay(2);                       //ADC power-on delay and Start A/D conversion
}
void Int_PCA()
{
    CCON = 0;                       //初始化PCA控制寄存器
                                    //PCA定时器停止
                                    //清除CF标志
                                    //清除模块中断标志
    CL = 0;                         //复位PCA寄存器
    CH = 0;
    CCAP0L = 0;
    CCAP0H = 0;
    CMOD = 0x01;                    //设置PCA时钟源为系统时钟/12且使能PCA计时溢出中断
    CCAPM0 = 0x21;                  //PCA模块0为16位捕获模式(上升沿捕获可测从高电平开始的整个周期)且产生捕获中断
//  CCAPM0 = 0x11;                  //PCA模块0为16位捕获模式(下降沿捕获可测从低电平开始的整个周期)且产生捕获中断
//  CCAPM0 = 0x31;                  //PCA模块0为16位捕获模式(上升沿/下降沿捕获可测高电平或者低电平宽度)且产生捕获中断
}
void PCA_isr() interrupt 7 using 1
{
    if (CCF0)
    {
        CCF0 = 0;
        if (CF && ((CCAP0H & 0x80) == 0))
        {
            CF = 0;
        }
        oldtime = newtime;            //备份上一次的捕获值
        ((unsigned char *)&newtime)[1] = CCAP0L;  //保存本次的捕获值
        ((unsigned char *)&newtime)[0] = CCAP0H;
        length = newtime - oldtime;   //计算两次捕获的差值即得到时间长度
freq=FOSC/12/length+1;
    }
    if (CF)
    {
        CF = 0;       
    }
}
void main(void) 
{  
  char itemtemx=8temy;
  float voltage_maxvoltage_minvpp;
  LCD_Init(); //OLED初始化
  Draw_BMP(2601055logo_bmp);//显示图片
  LCD_P16x16Str(186“迷梦數码科技“);//16x16显示字符串
  delay(1000); 
  LCD_Fill(0x00);
  delay(500); 
  Draw_BMP(001287coordinate_bmp);
  LCD_P6x8Str(80“Vpp=“);
  LCD_P6x8Str(660“Freq=“);
 // LCD_P3x5Str(875);
  InitADC();
  Int_PCA();
  CR = 1;                         //PCA定时器开始工作
  EA = 1;
  newtime = 0;
  oldtime = 0;
  for(;;) 
  {

      while(1)
      {   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      12805  2014-11-29 13:01  stc.h

     文件       4022  2014-12-13 18:12  main.c

     文件       7032  2014-12-13 18:22  main.LST

     文件      14721  2014-12-13 18:22  main.OBJ

     文件      49386  2014-12-13 18:22  OLED

     文件      34359  2014-12-13 18:21  oled.c

     文件       1408  2014-11-30 17:24  oled.h

     文件      28790  2014-12-13 18:22  OLED.hex

     文件         53  2014-12-13 18:22  OLED.lnp

     文件      48846  2014-12-13 18:22  oled.LST

     文件      50060  2014-12-13 18:22  OLED.M51

     文件      41891  2014-12-13 18:22  oled.OBJ

     文件       8373  2014-12-13 18:25  OLED.plg

    .......     57505  2014-12-13 18:24  OLED.uvopt

     文件      13381  2014-11-06 19:54  OLED.uvproj

    .......     57503  2014-12-11 16:47  OLED_uvopt.bak

     文件          0  2014-11-06 16:58  OLED_uvproj.bak

----------- ---------  ---------- -----  ----

               430135                    17


评论

共有 条评论