⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 og.c

📁 让模拟示波器显示任意字符和图片 采用MSP430系列单片机开发
💻 C
字号:
#include "og.h"
#include "msp430x16x.h"
#include "at45db041.h"
extern unsigned char zh[][32]=
{//0
  /*--  文字:  纪  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x70,0x2C,0xA3,0x60,0x18,0x00,0xC2,0x42,0x42,0x42,0x42,0x42,0x7E,0x00,0x00,
0x10,0x32,0x13,0x12,0x0A,0x0A,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x78,0x20,0x00,
//1
/*--  文字:  家  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x18,0x04,0x14,0x94,0x94,0xD5,0xB6,0x14,0x14,0x94,0x04,0x14,0x0C,0x04,0x00,
0x00,0x29,0x29,0x15,0x14,0x4A,0x89,0x44,0x3F,0x06,0x09,0x09,0x10,0x30,0x10,0x00,
//2
/*--  文字:  刚  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0xFE,0x0A,0x32,0xC2,0x32,0x0A,0xFE,0x00,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,
0x00,0x7F,0x04,0x03,0x00,0x23,0x64,0x3F,0x00,0x00,0x0F,0x20,0x40,0x3F,0x00,0x00,
//3
/*--  文字:  正  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,
0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
//4
/*--  文字:  反  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xFE,0x12,0x72,0x92,0x12,0x12,0x12,0x11,0x91,0x71,0x01,0x00,0x00,0x00,
0x40,0x30,0x4F,0x40,0x20,0x21,0x12,0x0C,0x0C,0x12,0x11,0x20,0x60,0x20,0x00,0x00,
//5
/*--  文字:  向  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xFC,0x04,0x04,0xE6,0x25,0x24,0x24,0x24,0xE4,0x04,0x04,0xFC,0x00,0x00,
0x00,0x00,0x7F,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x0F,0x20,0x40,0x3F,0x00,0x00,
//6
/*--  文字:  特  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x1C,0x10,0xFF,0x90,0xB0,0x24,0x24,0x24,0x3F,0x24,0xE4,0x24,0x24,0x20,0x00,
0x02,0x02,0x01,0xFF,0x00,0x00,0x01,0x05,0x19,0x41,0x81,0x7F,0x01,0x01,0x01,0x00,
//7
/*--  文字:  性  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x70,0x00,0xFF,0x08,0x30,0x40,0x30,0x1E,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x00,
0x00,0x00,0x7F,0x00,0x00,0x20,0x20,0x21,0x21,0x21,0x3F,0x21,0x21,0x21,0x20,0x00,
//8
/*--  文字:  击  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x88,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0x88,0xC0,0x80,0x00,
0x00,0x00,0x00,0x7E,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x7E,0x00,0x00,0x00,
//9
/*--  文字:  穿  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x0C,0x24,0x14,0xAC,0x24,0x25,0x26,0x24,0xE4,0x2C,0x14,0x24,0x0C,0x04,0x00,
0x40,0x40,0x20,0x22,0x13,0x12,0x0A,0x46,0x82,0x7F,0x02,0x02,0x02,0x02,0x00,0x00,
//10
/*--  文字:  iD  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0xFF,0x81,0x81,0x42,0x3C,0x00,0x00,0x00,
//11
/*--  文字:  uD  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,0x00,0xFE,0x82,0x82,0x44,0x38,0x00,0x00,
};
extern unsigned char xu[]=
{
  /*--  文字:  电  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,

/*--  文字:  子  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,
0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,

/*--  文字:  科  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,
0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00,

/*--  文字:  技  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00,
0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00,

/*--  文字:  大  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,

/*--  文字:  学  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
};
unsigned char OG_Digit[][16]=
{
  /*--  文字:  0  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

/*--  文字:  1  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

/*--  文字:  2  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

/*--  文字:  3  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

/*--  文字:  4  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

/*--  文字:  5  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

/*--  文字:  6  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

/*--  文字:  7  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

/*--  文字:  8  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,

/*--  文字:  9  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,

//10
/*--  文字:  +  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,

//11
/*--  文字:  -  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

//12
/*--  文字:  =  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,

//13
/*--  文字:  <  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,

//14
/*--  文字:  >  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,

//15
/*--  文字:  (  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,

//16
/*--  文字:  )  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,

//17
/*--  文字:  /  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,
//18
/*--  文字:  I  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
//19
/*--  文字:  U  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
//20
/*--  文字:  V  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,
//21
/*--  文字:  B  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,
//22
/*--  文字:  R  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,
//23
/*--  文字:  S  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,
//24
/*--  文字:  t  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,
//25
/*--  文字:  h  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
//26
/*--  文字:  u  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,
//27
/*--  文字:  m  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
//28
/*--  文字:  A  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,
};

/*
********************************************************************************
**函数名称: void OG_Init(void)
**函数功能: 示波器显示初始化
**入口参数: 无
**出口参数: 无
********************************************************************************
*/
void OG_Init(void)
{
  ADC12CTL0 = REFON + REF2_5V;
  DAC12_0CTL = DAC12IR + DAC12AMP_7 + DAC12ENC;
  DAC12_1CTL = DAC12IR + DAC12AMP_7 + DAC12ENC;
  DAC12_0DAT = 0x0000;
  DAC12_1DAT = 0x0000;
}

/*
********************************************************************************
函数名称:DA_Disp()
函数功能:设置DA输出
入口参数:unsigned a:DA0的输出;  unsigned b:DA1的输出
出口参数:无
********************************************************************************
*/
void DA_Disp(unsigned int a,unsigned int b)
{
  DAC12_0DAT = a;
  DAC12_1DAT = b;
}

/*
********************************************************************************
函数名称:OG_Disp()    "oscillograph display"
函数功能:在模拟示波器上显示图形或字符
取模方式:纵向,倒序
OG_X:起始X
OG_Y:起始Y
*GP:图象地址
P_X:象素
P_Y:象素
M:每点之间间距
********************************************************************************
*/

void OG_Disp(unsigned int OG_X,unsigned int OG_Y,unsigned char *GP,
             unsigned int P_X,unsigned int P_Y,unsigned char M_X,unsigned char M_Y)
{
  unsigned char i;
  unsigned char tmp;
  unsigned int OG_I;                      //高度计数
  unsigned int OG_J;                      //宽度计数
  //unsigned int GP_Len = P_X*P_Y/8;     //GP长度
  unsigned char GP_High = P_Y/8;        //GP的高度,有几层
  for(OG_I=0;OG_I<GP_High;OG_I++)
  {
    for(OG_J=0;OG_J<P_X;OG_J++)
    {
      tmp = GP[OG_I*P_X+OG_J];
      for(i=0;i<8;i++)
      {
        if(tmp&0x80)
        {
          DA_Disp(OG_X+OG_J*M_X,OG_Y+(GP_High-1-OG_I)*8*M_Y+i*M_Y);          
        }
        tmp<<=1;
      }
    }
  }
  
}

/*
********************************************************************************
**函数名称: void OG_Disp_Char()
**函数功能: 在示波器上显示16X16的汉字.,每两点之间间隔15,4096/15=272
**          取模方式:横向取模,字节顺序
**          显示17X17个中文汉字
**          将示波器分辨率看成272X272的点阵             
**入口参数: unsigned int OG_X--显示位置X
**          unsigned int OG_Y--显示位置Y
**          unsigned char *GP--待显示的字模数组
**出口参数: 无
********************************************************************************
*/
void OG_Disp_Char(unsigned int OG_X,unsigned int OG_Y,unsigned char *GP)
{
  unsigned char P_X = 16;
  unsigned char P_Y = 16;
  unsigned char i;
  unsigned char tmp;
  unsigned int OG_I;                      //高度计数
  unsigned int OG_J;                      //宽度计数
  //unsigned int GP_Len = P_X*P_Y/8;     //GP长度
  unsigned char GP_Len = P_X/8;        //GP的长度,有几层
  for(OG_I=0;OG_I<P_Y;OG_I++)
  {
    for(OG_J=0;OG_J<GP_Len;OG_J++)
    {
      tmp = GP[OG_I*GP_Len+OG_J];
      for(i=0;i<8;i++)
      {
        if(tmp&0x80)
        {
          DA_Disp((OG_X*16+OG_J*8+i)*15,(OG_Y*16+P_Y-OG_I)*15);          
        }
        tmp<<=1;
      }
    }
  }
}

/*
********************************************************************************
**函数名称: void OG_Display_Array()
**函数功能: 在示波器上显示汉字
**          使用范例:OG_Display_Array("我爱北京天安门",14,0,16);
**入口参数: unsigned char *data--待显示的汉字
**          unsigned char data_L--待显示的汉字的长度
**          unsigned char dirX--显示位置X
**          unsigned char dirY--显示位置Y
**出口参数: 无
********************************************************************************
*/
void OG_Display_Array(unsigned char *data,unsigned char data_L,unsigned char dirX,unsigned char dirY)
{
  unsigned char chNum = data_L/2;
  unsigned int  P_Addr;           //页地址
  unsigned char B_Addr;           //页内字节地址
  unsigned char chI;
  unsigned char chJ;
  unsigned int  rowNum;           //行号
  unsigned char tmpzimo[32];
  for(chI=0;chI<chNum;chI++)
  {
    rowNum=((data[chI*2]-0xA1)*94 + (data[chI*2+1]-0xA1))*2;
    P_Addr = rowNum/16;
    B_Addr = (rowNum/2 - P_Addr*16)*32;
    DF_Read_Main(P_Addr,B_Addr,32);    
    for(chJ=0;chJ<32;chJ++)
    {
      tmpzimo[chJ] = DF_R[chJ];
    }
    OG_Disp_Char(dirX+chI,dirY,tmpzimo);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -