【单片机笔记】OLED控制器SSD1306及驱动代码

发布者:温雅如风最新更新时间:2019-02-18 来源: eefocus关键字:单片机  OLED控制器  SSD1306  驱动代码 手机看文章 扫描二维码
随时随地手机看文章

前言:


很长一段时间内用OLED的机会都很少,即使用了也是参考的大牛的代码,最近迫不得已又仔细研究了一遍。记下来省的忘记。


手头上用到的是0.61寸的OLED分辨率是96*16,也就是横向有96个点,纵向有16个点,贴上这个的尺寸图



我并没有看太多的资料,网上的资料也非常多,大多数是将SSD1306的,这里就简单通俗的记录一下,拿这个96*16的为例子,SSD把纵向(y方向)做了分页处理,每8个像素点作为一组(8个像素点=8个bit=一个字节),那么对于y方向有16个点的那就是分成两页了,从0开始就是0和1。对于其他分辨率的也一样,向上加就对了。在驱动的时候最常规的方法是从左到右,从上到下。值得注意的是不同型号可能取模的方式不一样,有点高位在前也有的低位在前,我现在用的是低位在前,这个手册里面还是有说的。下面附上取模的软件和配置选项:


软件用的是:PCtoLCD2002


取模配置如下:


效果图:



最后附上详细的代码(理论上支持所有的SSD1306控制器)我在12832也试过没有问题,需要自行修改宏定义,代码都有详细的中文注释:


#include "fy_oled12832.h"

#include "fy_oledfont.h"   




#define OLED_IIC_SCL_PIN  GPIO_PIN_4

#define OLED_IIC_SCL_L() GPIO_WriteLow(OLED_IIC_SCL_PORT,OLED_IIC_SCL_PIN) //SCLIIC接口的时钟信号

#define OLED_IIC_SCL_H() GPIO_WriteHigh(OLED_IIC_SCL_PORT,OLED_IIC_SCL_PIN)//PB4


#define OLED_IIC_SDA_PORT GPIOB

#define OLED_IIC_SDA_PIN  GPIO_PIN_5

#define OLED_IIC_SDA_L() GPIO_WriteLow(OLED_IIC_SDA_PORT,OLED_IIC_SDA_PIN) //SDA IIC接口的数据信号

#define OLED_IIC_SDA_H() GPIO_WriteHigh(OLED_IIC_SDA_PORT,OLED_IIC_SDA_PIN)//PB5

 

/*

96*16像素 

x[0-95]

y[0-15]

注意:y方向分成了两页 每页8个像素点 刚好是一个字节

*/


  

#define Max_x 96

#define Max_y 2    

#define OLED_IIC_SCL_PORT GPIOB

     

#define OLED_CMD  0X00 //写命令

#define OLED_DATA 0X40 //写数据


static void Oled_IIC_Configuration(void)

{

GPIO_Init(OLED_IIC_SCL_PORT,OLED_IIC_SCL_PIN,GPIO_MODE_OUT_PP_LOW_FAST);//设置PB4为推挽输出

GPIO_Init(OLED_IIC_SDA_PORT,OLED_IIC_SDA_PIN,GPIO_MODE_OUT_PP_LOW_FAST);//设置PB5为推挽输出 

}


//IIC Start

static void Oled_IIC_Start(void)

{

OLED_IIC_SCL_H();

OLED_IIC_SDA_H();

OLED_IIC_SDA_L();

OLED_IIC_SCL_L();

}


//IIC Stop

static void Oled_IIC_Stop(void)

{

OLED_IIC_SCL_L();

OLED_IIC_SDA_L();

OLED_IIC_SDA_H();

OLED_IIC_SCL_H() ;

}


// IIC Send byte

static void Oled_IIC_SendByte(u8 dat)

{

u8 i;

for(i=0;i<8;i++)

{

OLED_IIC_SCL_L();

if(dat & 0x80)

OLED_IIC_SDA_H();

else 

OLED_IIC_SDA_L();

dat<<=1;

OLED_IIC_SCL_H();

}


OLED_IIC_SCL_L();

OLED_IIC_SCL_H();

}


//OLED写一个字节 

//dat:写入的字节 

//cmd:命令或者数据

void Oled_WriteByte(u8 dat,u8 cmd)

{

Oled_IIC_Start();

Oled_IIC_SendByte(0x78);

Oled_IIC_SendByte(cmd);

Oled_IIC_SendByte(dat);

Oled_IIC_Stop();

}


//坐标设置

void Oled_SetPos(u8 x, u8 y) 

Oled_WriteByte(0xb0+y,OLED_CMD);

Oled_WriteByte(((x&0xf0)>>4)|0x10,OLED_CMD);

Oled_WriteByte((x&0x0f),OLED_CMD); 

}      

     

//清屏   

void Oled_Clear(void)  

{  

u8 i,n;     

for(i=0;i

{  

Oled_WriteByte (0xb0+i,OLED_CMD);    //设置页地址(0~1)

Oled_WriteByte (0x00,OLED_CMD);      //设置显示位置—列低地址

Oled_WriteByte (0x10,OLED_CMD);      //设置显示位置—列高地址   

for(n=0;n

} //更新显示

}


//在指定位置显示一个字符

void Oled_ShowChar(u8 x,u8 y,u8 chr)

{     

u8 c=0,i=0;

c=chr-' ';//得到偏移后的值

if(x>Max_x-1)

{

  x=0;

  y++;

  if(y>Max_y-1) return;

}//这里的y代表的页地址 6*8的字符所以页加一

Oled_SetPos(x,y);

for(i=0;i<6;i++)//6*8的字符 点阵占6列没列8个像素点(一个字节),也就是一页的6列

Oled_WriteByte(F6x8[c][i],OLED_DATA);

}


//显示一个字符号串

void Oled_ShowString(u8 x,u8 y,u8 *chr)

{

u8 j=0;

if(y>Max_y-1) return;

while (chr[j]!='\0')

{

Oled_ShowChar(x,y,chr[j]);

x+=6;//6*8的字符 点阵占6列所以加6

if(x>Max_x-6){x=0;y++;}          

j++;

}

}


//显示汉字 16*16的汉字

void Oled_ShowCHinese(u8 x,u8 y,u8 no)

{          

u8 t;

Oled_SetPos(x,y);

for(t=0;t<16;t++)//先写第一页

{

Oled_WriteByte(Hzk[2*no][t],OLED_DATA);

}

Oled_SetPos(x,y+1);

for(t=0;t<16;t++)//再写第二页

{

Oled_WriteByte(Hzk[2*no+1][t],OLED_DATA);

}

}



//初始化SSD1306     

void Oled_Configuration(void)

{

  Oled_IIC_Configuration();

  Delay_ms(100);


Oled_WriteByte(0xAE,OLED_CMD);//--display off

Oled_WriteByte(0x00,OLED_CMD);//---set low column address

Oled_WriteByte(0x10,OLED_CMD);//---set high column address

Oled_WriteByte(0x40,OLED_CMD);//--set start line address  

Oled_WriteByte(0xB0,OLED_CMD);//--set page address

Oled_WriteByte(0x81,OLED_CMD); // contract control

Oled_WriteByte(0xFF,OLED_CMD);//--128   

Oled_WriteByte(0xA1,OLED_CMD);//set segment remap 

Oled_WriteByte(0xA6,OLED_CMD);//--normal / reverse

Oled_WriteByte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)

Oled_WriteByte(0x0F,OLED_CMD);//--1/16 duty

Oled_WriteByte(0xC8,OLED_CMD);//Com scan direction

Oled_WriteByte(0xD3,OLED_CMD);//-set display offset

Oled_WriteByte(0x00,OLED_CMD);//

Oled_WriteByte(0xD5,OLED_CMD);//set osc division

Oled_WriteByte(0x80,OLED_CMD);//

Oled_WriteByte(0xD9,OLED_CMD);//set pre-charge period

Oled_WriteByte(0x22,OLED_CMD);//

Oled_WriteByte(0xDA,OLED_CMD);//set COM pins

Oled_WriteByte(0x02,OLED_CMD);//

Oled_WriteByte(0xDB,OLED_CMD);//set vcomh

Oled_WriteByte(0x40,OLED_CMD);//

Oled_WriteByte(0x8D,OLED_CMD);//set charge pump enable

Oled_WriteByte(0x14,OLED_CMD);//

Oled_WriteByte(0xAF,OLED_CMD);//--turn on oled panel

}  



void Oled_TEST(void)

{

Delay_ms(200);        //延时200ms

Oled_Configuration(); //OLED初始化

Delay_ms(200);        //延时200ms

Oled_Clear();      //清屏

Delay_ms(200);        //延时200ms


while (1)

  

  Oled_Clear();//清屏

  Oled_ShowString(0,0,"012345678ABCDEFGQWERTYUIOO");//显示数字


  Delay_ms(2000);

  

  Oled_Clear();                        //清屏

  Oled_ShowCHinese(8,0,0);             //显示汉字“火”

  Oled_ShowCHinese(24,0,1);            //显示汉字“星”

  Oled_ShowCHinese(40,0,2);            //显示汉字“科”

  Oled_ShowCHinese(56,0,3);            //显示汉字“技”

  

  Delay_ms(2000);

}

}


字库:

#ifndef __FY_OLEDFONT_H

#define __FY_OLEDFONT_H    


const unsigned char F6x8[][6] =

{

    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp

    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !

    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "

    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #

    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $

    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %

    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &

    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '

    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (

    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )

    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *

    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +

    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,

    { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -

    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .

    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /

    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0

    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1

    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2

    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3

    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4

    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5

    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6

    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7

    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8

    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9

    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :

    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;

    { 0x08, 0x1C, 0x2A, 0x49, 0x08, 0x08 },   // <

    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =

    { 0x08, 0x08, 0x49, 0x2A, 0x1C, 0x08 },   // >

    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?

    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @

    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A

    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B

    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C

    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D

    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E

    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F

    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G

    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H

    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I

    { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J

    { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K

    { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L

    { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M

    { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N

    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O

    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P

    { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q

    { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R

    { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S

    { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T

    { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U

    { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V

    { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W

    { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X

    { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y

    { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z

    { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [

    { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55

    { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]

    { 0x04, 0x02, 0xFF, 0x02, 0x04, 0x00 },   // ^

    { 0x00, 0x20, 0x40, 0xFF, 0x40, 0x20 },   // _

    { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '

    { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a

    { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b

    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c

    { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d

    { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e

    { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f

    { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g

    { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h

    { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i

    { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j

    { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k

    { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l

    { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m

    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n

    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o

    { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p

    { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q

    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r

    { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s

    { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t

    { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u

    { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v

    { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w

    { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x

    { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y

    { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z

    { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines

};

char Hzk[][32]={


{0x00,0x00,0xC0,0x38,0x00,0x00,0x00,0xFF,0x00,0x00,0x40,0x20,0x18,0x00,0x00,0x00},

{0x80,0x81,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00},/*"火",0*/


{0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,0x00},

{0x00,0x44,0x42,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x41,0x40,0x00,0x00},/*"星",1*/


{0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00},

{0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00},/*"科",2*/


{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00},

{0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"技",3*/


};


#endif



/*********************************************END OF FILE**********************************************/



测试例程:


void Oled_TEST(void)

{

Delay_ms(200);        //延时200ms

Oled_Configuration(); //OLED初始化

Delay_ms(200);        //延时200ms

Oled_Clear();      //清屏

Delay_ms(200);        //延时200ms


while (1)

  

  Oled_Clear();//清屏

  Oled_ShowString(0,0,"012345678ABCDEFGQWERTYUIOO");//显示字符


  Delay_ms(2000);

  

  Oled_Clear();                        //清屏

  Oled_ShowCHinese(8,0,0);             //显示汉字“火”

  Oled_ShowCHinese(24,0,1);            //显示汉字“星”

  Oled_ShowCHinese(40,0,2);            //显示汉字“科”

  Oled_ShowCHinese(56,0,3);            //显示汉字“技”

  

  Delay_ms(2000);

}

}



至此完毕!

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

作者:沉默的小宇宙 

来源:CSDN 

原文:https://blog.csdn.net/qq997758497/article/details/78511281 

版权声明:本文为博主原创文章,转载请附上博文链接!


关键字:单片机  OLED控制器  SSD1306  驱动代码 引用地址:【单片机笔记】OLED控制器SSD1306及驱动代码

上一篇:【单片机笔记】代码中非线性表快速转换成数组的实用方法
下一篇:【单片机笔记】STM8S系列单片机FLASH操作

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

51单片机驱动1602LCD液晶的程序
/********************************************************************* 文件名称:lcd1602.c 文件功能:lcd1602液晶驱动 *********************************************************************/ #include lcd1602.h /********************************************************************* 功能:读取LCD状态 参数:无 返回:0 -- 空闲,可以进行读写操作 1 -- 忙 ********
[单片机]
PIC单片机源程序的模拟仿真与调试
  我们在编辑P IC 单片机 的C语言时,常常应用对源程序的模拟仿真技术,因为对程序的模拟仿真可代替部分单片机的硬件制作与调试,即使在深入学习PIC单片机C语言程序时,模拟仿真技术,也是不可缺少的。这里以程序实例演示其操作方法。   对源程序的模拟仿真可以完成下列功能:直接观察C程序从主程序main()开始运行的全过程;为了清楚观察程序中各变量和寄存器的变化情况,可采用单步运行(ste PIN to)命令和单步越过(stepover)命令进行模拟运行调试,使观察变量更方便;设置断点再选择Run(快速)命令,程序运行到断点处会停下来,以便观察变量功能;此外,还能定量观察程序中的变化值,如直接观察程序的延时量等多种功能。当然在进行程
[单片机]
PIC<font color='red'>单片机</font>源程序的模拟仿真与调试
ST发布低成本8位/32位微控制器通用开发工具
意法半导体日前推出一套成本低廉的微控制器应用开发工具RLink,这套工具能够在ST的8位到32位全系列微控制器平台上编写并调试应用程序。这套多功能的专业开发工具由Raisonance公司开发,支持ST7、基于8051的μPSD和基于ARM的STR7微控制器。 对于SRT7和μPSD系统,Rlink通过一个标准的JTAG接口连接目标应用或评估板,对于ST7系统,Rlink通过一个ICC(ST的内部电路通信协议)接口连接目标应用或评估板。工具套件中包括用于这三个系列的10、14和20针适配器,该工具通过其与PC主机相连的USB线供电,无需另连接电源。 这个硬件开发具采用Raisonance的集成开发环境(RIDE),通过图形用户界
[新品]
选择汽车MCU需要考虑哪些因素?
  在汽车应用中,微控制器( MCU )提供着至关重要的性能。随着价格的降低及整固的增加等原因,MCU也逐渐走向商品化。但是对于不同的MCU来说,仍存在很大的差异,因此如何选择合适的汽车MCU以降低成本而不影响所需的性能也变得尤为重要。   微控制器(MCU)在从电机控制,到信息娱乐系统和车身控制等越来越宽泛的汽车应用中提供至关重要的性能。随着价格的下降和整固的增加,微控制器正变得越来越普及,这意味着MCU被越来越多地视为商品。尽管存在这种商品化趋势,汽车系统设计工程师仍然认为不同的控制器会有很大的差异,包括各种级别的集成度和功率要求。选择MCU通常可以缩减材料成本(BOM),从而有效地降低电子控制单元(ECU)本身的价格。   
[单片机]
选择汽车<font color='red'>MCU</font>需要考虑哪些因素?
STM8L151C8单片机学习例程(13)——DHT11
STM8L_13_DHT11: 1.User:工程及main文件 2.Hardware:USART,CLK,LED,Delay,DHT11 3.STM8L15x_StdPeriph_Driver:STM8自带库文件 4.Debug:hex文件存放于EXE文件夹 5.Function: 采集DHT11传感器的温湿度参数,串口打印 低功耗设计时,常用的传感器参数采集有很多,如国产的DHT11温湿度采集,单总线时序简单,测量范围-湿度20-90%RH,温度0-50℃,一般用于精度不是很高的场景,如家电、汽车记录仪等。 /** **************************************************
[单片机]
STM8L151C8<font color='red'>单片机</font>学习例程(13)——DHT11
正确配置AVR单片机的熔丝位
  对AVR熔丝位的配置是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项。   (1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态,“Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是“配置熔丝位成为未编程状态“1”或成为已编程状态“0””。   (2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态为“0”还是为“1”。
[单片机]
全球车市的颓靡,法兰克福车展遭多家车企爽约
法兰克福车展德语名称 为 Internationale Automobil-Ausstellung ,意思为 国际汽车展览 ,多简称为IAA。2013年法兰克福车展主题是 电动化 。法兰克福汽车展,创 办于1897年,素有世界汽车工业 奥运会 之称,是世界最重要和最全面的汽车工业成就展,由德国汽车工业协会(VDA)主办。该展会每逢奇数年在法兰克 福展示乘用车(IAA Cars),偶数年在汉诺威展示商用车(IAA Commercial Vehicles),目前已成功举行了64届,本年度为第65届,参展的商家主要来自欧洲、美国和日本,尤其以欧洲汽车商居多。 全球车市的颓靡,正逐步蔓延至汽车电子领域。 9月10日的法兰克福,即将
[嵌入式]
全球车市的颓靡,法兰克福车展遭多家车企爽约
C51单片机的中断号以及中断向量
一、中断号   二、interrupt 和 using 在C51中断中的使用   8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务处理程序。中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。8051的中断向量表如下:
[模拟电子]
C51<font color='red'>单片机</font>的中断号以及中断向量
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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