T6963C的51单片机驱动程序

发布者:温馨时光最新更新时间:2015-04-27 来源: 51hei关键字:T6963C  51单片机  驱动程序 手机看文章 扫描二维码
随时随地手机看文章
#include

#include   
#include 
#include 
#include 
#include 
#include "Test.h"
/*   地址定义   */
#define  d_c_add XBYTE[0x00] //数据口  命令口
/*   常数定义   */
#define  uchar unsigned char
#define  uint unsigned  int

/* T6963C 命令定义 */
#define  LCD_CUR_POS  0x21      /* 光标位置设置(只有设置到有效显示地址并打开显示时才看到) */
#define  LCD_CGR_POS  0x22      /* CGRAM偏置地址设置(可以增加自已的符号) */
#define  LCD_ADR_POS  0x24      /* 地址指针位置(设置读写操作指针) */

#define  LCD_TXT_STP  0x40      /* 文本区首址(从此地址开始向屏幕左上角显示字符) */
#define  LCD_TXT_WID  0x41      /* 文本区宽度(设置显示宽度,N/6或N/8,其中N为x轴的点数) */
#define  LCD_GRH_STP  0x42      /* 图形区首址(从此地址开始向屏幕左上角显示点) */
#define  LCD_GRH_WID  0x43      /* 图形区宽度(设置显示宽度,N/6或N/8,其中N为x轴的点数) */

#define  LCD_MOD_OR         0x80                        /* 显示方式:逻辑或 */
#define  LCD_MOD_XOR  0x81      /* 显示方式:逻辑异或 */
#define  LCD_MOD_AND  0x82      /* 显示方式:逻辑与 */
#define  LCD_MOD_TCH  0x83      /* 显示方式:文本特征 */

#define  LCD_DIS_SW      0x90      /* 显示开关:D0=1/0,光标闪烁启用/禁用 */
                                                       / *        D1=1/0,光标显示启用/禁用 */
                                                       /*        D2=1/0,文本显示启用/禁用(打开后再使用) */
                                                      /*        D3=1/0,图形显示启用/禁用(打开后再使用) */
              
#define  LCD_CUR_SHP  0xA0      /* 光标形状选择:0xA0-0xA7表示光标占的行数 */

#define  LCD_AUT_WR      0xB0      /* 自动写设置 */
#define  LCD_AUT_RD      0xB1      /* 自动读设置 */
#define  LCD_AUT_OVR  0xB2      /* 自动读/写结束 */

#define  LCD_INC_WR      0xC0      /* 数据一次写,地址加1 */
#define  LCD_INC_RD      0xC1      /* 数据一次读,地址加1 */
#define  LCD_DEC_WR   0xC2      /* 数据一次写,地址减1 */
#define  LCD_DEC_RD   0xC3      /* 数据一次读,地址减1 */
#define  LCD_NOC_WR   0xC4      /* 数据一次写,地址不变 */
#define  LCD_NOC_RD   0xC5      /* 数据一次读,地址不变 */
       
#define  LCD_SCN_RD   0xE0      /* 屏读 */
       
#define  LCD_SCN_CP   0xE8      /* 屏拷贝 */

#define  LCD_BIT_OP   0xF0      /* 位操作:D0-D2--定义D0-D7位,D3--1为置位,0为清除 */
/*  定义标志位  */
sbit CD    = P1^0;
sbit CE    = P1^1;
sbit light = P1^2;
extern uchar code HZTable[ ][32];
extern uchar code ASCII_DOT_LIB[][16];
/********************************************************************************************************/
/***********************************************************************
* 名称:LCD_TestStaBit01()
* 功能:判断读写指令和读写数据是否允许。
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/
uchar   LCD_TestStaBit01(void)
{  uchar i;
   CD=1;
   for(i=100; i>0; i--)
   {  if( (d_c_add&0x03)==0x03 ) break;
   }
   return(i);
}
/***********************************************************************
* 名称:LCD_TestStaBit02()
* 功能:查询是否可数据自动读状态
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/
uchar   LCD_TestStaBit02(void)
{  uchar i;
   CD=1;
   for(i=100; i>0; i--)
   {  if( (d_c_add&0x04)==0x04 ) break;
   }
   return(i);
}
/***********************************************************************
* 名称:LCD_TestStaBit03()
* 功能:数据自动写状态是否允许。
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/
uchar LCD_TestStaBit03(void)
{  uchar i;
   CD=1;
   for(i=100; i>0; i--)
   {  if( (d_c_add&0x08)==0x08 ) break;
   }
   return(i);
}
/********************************************************************************************************/
/***********************************************************************
* 名称:LCD_ReadState()
* 功能:读取状态字子程序。
* 入口参数:无
* 出口参数:返回值即为读出的状态字
* 说明:函数会设置LCM数据总线为输入方式
***********************************************************************/
LCD_WriteCommand(uchar command)
{
CD=1;
d_c_add=command;
}
/********************************************************************************************************/
/***********************************************************************
* 名称:LCD_WriteData()
* 功能:写数据子程序。(发送数据前,不检查液晶模块的状态)
* 入口参数:dat   要写入LCM的数据
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/
LCD_WriteData(uchar dat)
{
CD=0;
d_c_add=dat;
}
/********************************************************************************************************/
/***********************************************************************
* 名称:LCD_ReadData()
* 功能:读取数据子程序。
* 入口参数:无
* 出口参数:返回值即为读出的数据
* 说明:函数会设置LCM数据总线为输入方式
***********************************************************************/
uchar LCD_ReadData(void)
{
 uchar dat;
 CD=0;
 dat=d_c_add;
 return dat;
}[page]
/**************************************LCD_WriteTCommand1******************************************************************/
/***********************************************************************
* 名称:LCD_WriteTCommand1()
* 功能:写无参数命令子程序。会先判断LCM状态字。
* 入口参数:command    要写入LCM的命令字
* 出口参数:操作出错返回0,否则返回1
***********************************************************************/
uchar  LCD_WriteTCommand1(uchar command)
{  if( LCD_TestStaBit01()==0 )return(0);
   LCD_WriteCommand(command);  // 发送命令字
   return(1);
}
/********************************LCD_WriteTCommand2************************************************************************/
/***********************************************************************
* 名称:LCD_WriteTCommand2()
* 功能:写单参数命令子程序。会先判断LCM状态字。
* 入口参数:command   要写入LCM的命令字
*          dat1  参数1
* 出口参数:操作出错返回0,否则返回1
* 说明:先发送参数据数据,再发送命令字
***********************************************************************/
uchar LCD_WriteTCommand2(uchar command, uchar dat1)
{  if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteData(dat1);    // 发送数据1
  
   if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteCommand(command);  // 发送命令字
   return(1);
}
/********************************LCD_WriteTCommand3************************************************************************/
/***********************************************************************
* 名称:LCD_WriteTCommand3()
* 功能:写双参数命令子程序。会先判断LCM状态字。
* 入口参数:command   要写入LCM的命令字
*          dat1  参数1
*          dat2  参数2
* 出口参数:操作出错返回0,否则返回1
* 说明:先发送两字节参数据数据,再发送命令字
***********************************************************************/
uchar  LCD_WriteTCommand3(uchar command, uchar dat1, uchar dat2)
{  if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteData(dat1);    // 发送数据1
  
   if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteData(dat2);    // 发送数据2
  
   if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteCommand(command);  // 发送命令字
  
   return(1);
}
/******************************LCD_WriteTData1**************************************************************************/
/***********************************************************************
* 名称:LCD_WriteTData1()
* 功能:写1字节数据子程序。会先判断状态字。
* 入口参数:dat    要写入LCM的数据
* 出口参数:操作出错返回0,否则返回1
***********************************************************************/
uchar  LCD_WriteTData1(uchar dat)
{  if( LCD_TestStaBit03()==0 ) {return(0);}
   LCD_WriteData(dat);    // 发送命令字
   return(1);
}

/*******************************LCD_Initialize*************************************************************************/
 void  LCD_Initialize(void)
{  LCD_WriteTCommand3(LCD_TXT_STP, 0x00, 0x00);   // 设置文本方式RAM起始地址
   LCD_WriteTCommand3(LCD_TXT_WID, 30, 0x00);   // 设置文本模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
   LCD_WriteTCommand3(LCD_GRH_STP, 0x00, 0x00);   // 设置图形方式RAM起始地址
   LCD_WriteTCommand3(LCD_GRH_WID, 30, 0x00);   // 设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
   LCD_WriteTCommand1(LCD_MOD_OR);      // 设置显示方式为"或"
   LCD_WriteTCommand1(LCD_DIS_SW|0x08);     // 设置纯图形显示模式
   LCD_WriteTCommand1(LCD_CUR_SHP|0x07);    // 光标形状
}
/*********************************LCD_FillAll**********************************************************************/
void  LCD_FillAll(uchar dat)
{  uint  i;

   LCD_WriteTCommand3(LCD_ADR_POS, 0x00, 0x00);   // 置地址指针
   LCD_WriteTCommand1(LCD_AUT_WR);      // 自动写
   for(i=0;i<128*30;i++)
   {  LCD_WriteTData1(dat);        // 写数据
   }
   LCD_WriteTCommand1(LCD_AUT_OVR);      // 自动写结束
   LCD_WriteTCommand3(LCD_ADR_POS,0x00,0x00);   // 重置地址指针
}
/********************************************************************************************************/
void Write_Hz(uchar x,uchar y,uchar datah)
{
 uchar i;
 uint StartAddr;
 StartAddr=x*480+y;     
 for(i=0;i<16;i++)
 { LCD_WriteTCommand3(LCD_ADR_POS,StartAddr,((StartAddr)/256));
  LCD_WriteTCommand2(LCD_INC_WR,HZTable[datah][i*2] );
  LCD_WriteTCommand2(LCD_NOC_WR,HZTable[datah][i*2+1]);
  StartAddr=StartAddr + 30;
 }
}
/********************************************************************************************************/
//显示数字
void Write_No(uchar x,uchar y,uchar ch)
{
 uchar i, dat;
 uint StartAddr;
 StartAddr=x*480+y; 
 for(i=0;i<16;i++)
 {
  dat=ASCII_DOT_LIB[ch][i];
  LCD_WriteTCommand3(LCD_ADR_POS,StartAddr,StartAddr>>8);
  LCD_WriteTCommand2(LCD_NOC_WR,dat);
  StartAddr=StartAddr + 30;
  
 }
}
/********************************************************************************************************/
//显示字母,纵向写字,取模方式:纵向取模,字节正序
void Write_Char(uchar x,uchar y,uchar ch)
{
 uchar i, dat;
 uint StartAddr,StartAddr1;
 StartAddr=x*240+y;
 StartAddr1=x*240+y+1;
 for(i=0;i<8;i++)
 { 
   dat=ASCII_DOT_LIB[ch][i];
      LCD_WriteTCommand3(LCD_ADR_POS,StartAddr,StartAddr>>8);
   LCD_WriteTCommand2(LCD_NOC_WR,dat);
      StartAddr=StartAddr+30;
 } 
for(i=0;i<8;i++)
 { 
   dat=ASCII_DOT_LIB[ch][i+8];
      LCD_WriteTCommand3(LCD_ADR_POS,StartAddr1,StartAddr1>>8);
   LCD_WriteTCommand2(LCD_NOC_WR,dat);
   StartAddr1=StartAddr1+30;
 } 
  
}
/********************************************************************************************************/
void Charline(uchar x,uchar y ,uchar n,uchar m)
{
 uchar i;
 for(i=0;i>8);
   //LCD_WriteTCommand1(0xc5); //数据一次读,地址不变
      //dat=LCD_ReadData(); //读入数据
   dat=ASCII_DOT_LIB[ch][i];
      dat=(0xff-dat); //取反
   //LCD_WriteTCommand2( dat, 0xc4); //送回
   LCD_WriteTCommand2(LCD_NOC_WR,dat);
      StartAddr=StartAddr+30;
  }
 for(i=0;i<8;i++)
 {
      LCD_WriteTCommand3(LCD_ADR_POS,StartAddr1,StartAddr1>>8);
   //LCD_WriteTCommand1(0xc5); //数据一次读,地址不变
     // dat=LCD_ReadData(); //读入数据
  dat=ASCII_DOT_LIB[ch][i+8];
      dat=(0xff-dat); //取反
  // LCD_WriteTCommand2(dat, 0xc4); //送回
  LCD_WriteTCommand2(LCD_NOC_WR,dat);
      StartAddr1=StartAddr1+30;
  }
}
/**********************************
//= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
//= 功    能: 在指定坐标位置显示一个点
//= 参    数: 坐标,显示点或清除点
//= 返 回 值:
//= 函数性质:私有函数
//= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型
//= Mode 1:显示 0:清除该点
**********************************/
Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
{
    unsigned int StartAddr;
 uchar StartAddrL,StartAddrH;
    unsigned char dat;
    StartAddr=(uint)((uint)PointX*30 + PointY/8 );//grhome
 StartAddrL=StartAddr&0xFF;
 StartAddrH=StartAddr>>8;
    dat=LCD_BIT_OP+7-PointY%8; //生产位操作命令画点的数据
    if(Mode) dat=dat|0x08;
    LCD_WriteTCommand3(LCD_ADR_POS,StartAddrL,StartAddrH);//设置该点所在单元地址
    LCD_WriteTCommand1(dat); // 利用位操作命令画点
}

/**********************************
//= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
//= 功    能: 划线函数
//= 参    数: 坐标1,坐标2,显示点或清除点
//= 返 回 值:
//= 函数性质:私有函数
//= 其它:显示点阵不超过255*255
/**********************************/

void line( unsigned char y1,unsigned char x1, unsigned char y2,unsigned char x2,  bit Mode)
{
    unsigned char x,y;
    float k,b;
    if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
    {
        k=((float)y2-y1) / ((float)x2-x1) ;
        b=y1-k*x1;
        if( x1 <= x2 )
        {
            for(x=x1;x<=x2;x++)
            {
                y=(uchar)(k*x+b);
                Pixel(x, y, Mode);
            }
        }
        else
        {
            for(x=x2;x<=x1;x++)
            {
                y=(uchar)(k*x+b);
                Pixel(x, y, Mode);
            }
        }
    }
    else // abs(y1-y2) > abs(x1-x2) |K|>1
    {
        k=((float)x2-x1) / ((float)y2-y1) ;
        b=x1-k*y1;
        if( y1 <= y2 )
        {
            for(y=y1;y<=y2;y++)
            {
                x=(uchar)(k*y+b);
                Pixel( x , y,Mode );
            }
        }
        else
        {
            for(y=y2;y<=y1;y++)
            {
                x=(uchar)(k*y+b);
                Pixel( x , y,Mode );
            }
        }
    }
}


/********************************************************************************************************/

uchar code HZTable[ ][32]={
{0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04},/*"测",0*/

{0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00},/*"试",1*/

{0x0D,0xF8,0x71,0x08,0x11,0x08,0x11,0x08,0xFD,0x08,0x11,0xF8,0x30,0x00,0x3B,0xFC,
0x54,0x40,0x50,0x40,0x93,0xFC,0x10,0x40,0x10,0x40,0x10,0x40,0x17,0xFE,0x10,0x00},/*"程",2*/


{0x01,0x00,0x00,0x80,0x3F,0xFE,0x20,0x00,0x27,0xF8,0x21,0x10,0x20,0xA0,0x20,0x40,
0x2F,0xFE,0x20,0x44,0x20,0x40,0x20,0x40,0x20,0x40,0x40,0x40,0x41,0x40,0x80,0x80},/*"序",0*/

{0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,
0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02},/*"我",1*/

};


unsigned char code ASCII_DOT_LIB[][16]=
{
 //正确的,纵向取模,字节正序
  0x00,0x10,0x18,0x14,0x03,0x11,0x1F,0x10,0x00,0x04,0x1C,0x64,0x80,0x04,0xFC,0x04,
  0x00,0x08,0x10,0x17,0x11,0x11,0x1F,0x10,0x00,0x18,0x04,0xC4,0x04,0x04,0xFC,0x04,
  0x00,0x10,0x1C,0x13,0x00,0x13,0x1C,0x10,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,

    0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,  // -0-

    0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,  // -1-

    0x00,0x0E,0x11,0x10,0x10,0x10,0x0E,0x00,0x00,0x0C,0x84,0x44,0x24,0x14,0x0C,0x00,  // -2-

    0x00,0x0C,0x12,0x11,0x11,0x10,0x0C,0x00,0x00,0x70,0x88,0x04,0x04,0x04,0x18,0x00,  // -3-

    0x00,0x00,0x1F,0x08,0x04,0x03,0x00,0x00,0x00,0x24,0xFC,0x24,0x24,0x20,0xE0,0x00,  // -4-

    0x00,0x10,0x10,0x11,0x11,0x10,0x1F,0x00,0x00,0x70,0x88,0x04,0x04,0x84,0x98,0x00,  // -5-

    0x00,0x00,0x18,0x11,0x11,0x08,0x07,0x00,0x00,0x70,0x88,0x04,0x04,0x88,0xF0,0x00,  // -6-

};
关键字:T6963C  51单片机  驱动程序 引用地址:T6963C的51单片机驱动程序

上一篇:红外通信—红外遥控器NEC解码程序
下一篇:SLE4442卡_IC的51单片机驱动程序

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

Vxworks嵌入式操作系统下网络设备驱动程序设计
作者Email: cai_yang@etang.com 摘 要:本文主要介绍在Vxworks操作系统下网络设备驱动程序设计、调试方法以及将其加入系统内核的配置方法。 关键词:Vxworks 嵌入式操作系统 网络设备 引 言   VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。    1 嵌入式
[应用]
51单片机抗干扰技术
以MSC-51系列的8031单片机为例,给出了在软硬件设计的不同阶段,对于不同干扰应采取的一些措施。       1 引 言    在单片机的应用系统中,系统的抗干扰技术是系统可靠性的重要方面。一个系统的正确与否,不仅取决于系统的设计思想和方法,同时还取决于系统的抗干扰措施,不然势必会出现原理正确而系统稳定性差,甚至不能实施,使得耗费了大量钱财和时间研制出来的控制系统成为一种摆设,电脑变成了 烦恼 。正因如此,抗干扰技术的研究越来越引起大家的高度重视。   以下为笔者在多年单片机控制系统设计和应用中拾取的一些抗干扰的经验体会。 2 单片机系统软件的抗干扰    一般来讲,窜入微机测
[单片机]
基于MCS-51单片机的电气控制线路接线故障诊断系统
   0 引言   在电气控制类课程的教学中,常规的训练项目主要有三相异步电动机的点动控制线路、连续运行控制线路、正反转控制线路、顺启逆停控制线路、降压启动控制线路、接触器联锁正反转控制线路的安装、接线与调试等实训项目。 在教学过程中,教师对学生训练结果的检查和考评是一件很繁琐的事,人工检查效率低、安全性差,稍有不慎就会造成跳闸、烧毁线路等电气事故。电气控制线路接线故障诊断系统能够自动检查学生接线所存在的问题,并能提示接线故障的所在,禁止带故障合闸通电试验,保证训练过程的人身安全和设备安全。 另外,配合接线故障诊断系统管理计算机以及相应的管理软件,可组成智能化的电气控制实训室,能够方便快捷地对每个学生的接线情况自动
[单片机]
基于MCS-<font color='red'>51单片机</font>的电气控制线路接线故障诊断系统
51单片机按键程序中while(!key)的作用是什么
我相信大家也是常常遇到过这一句代码while(!key);,那么大家知道这句代码是有什么用吗?在这我就和大家分享一下,还是用代码来说话吧: #include reg52.h typedef unsigned int uint; typedef unsigned char uchar; sbit key=P1^0; void delay(uint x) { uchar i; while(x--)for(i=0;i 120;i++); } void scan_key(void) { uchar j; if(key==0)//判断按键是否被按下 delay(10);//按键消抖 if(key==0)
[单片机]
用Proteus学习51单片机之串口
串口的理论知识我就不记了,网上多的是。51单片机的串口,有4种方式,分别为方式0,方式1,方式2,方式3.由于我的目的,使用串口主要是为了和电脑进行通信,所以主要使用方式1(事实上我也只学了方式1,其他方式等用到的时候再学吧)。 串口的方式1,其波特率与定时器T1相关,公式如下: 方式1波特率 = (2SMOD×32)/(T1溢出率) SMOD是一个寄存器,一般我们就取0了 T1的溢出率,即每秒T1计数满几次(相关知识可以看看前面笔记的记录) 正是因为如上的公式,所以设置TH1和TL1的初值,就能控制方式1的波特率了。不过一般波特率是固定的那么几种,像2400,4800和9600等,要用的时候查一下初值就成了。 由于用的是Prot
[单片机]
用Proteus学习<font color='red'>51单片机</font>之串口
怎样让Keil软件同时兼容51单片机和ARM单片机的问题
相信学ARM的童鞋大多数都是先学过51的,你如果用Keil这样的编译环境的话,也许你会发现之前学校51的Keil开发环境无法兼容ARM,或者你在做项目,同时要用到Keil开发51单片机和ARM单片机,这个时候就开始无奈了,发现装了keil C或ADK 里面都只有51或者ARM一种单片机核可供选。难道要我们分别安装这两个软件?答案是不可取的,经过了解,KEIL公司是被ARM公司收购了,自从是一家人以后,它们总该相处得好点吧,至少兼容问题总不能自家人排斥自家人,那就太不够意思了,呵呵。 这几天因为公司的破电脑只有 10G的C盘空间被我装软件以及桌面上放的各种文件给填满了,所以打算把一些软件移到其它盘,删除了KEIL软件以
[单片机]
怎样让Keil软件同时兼容<font color='red'>51单片机</font>和ARM单片机的问题
80C51单片机上电复位和复位延时的时序分析
  80C51单片机的上电复位POR(Power On Reset)实质上就是上电延时复位,也就是在上电延时期间把单片机锁定在复位状态上。为什么在每次单片机接通电源时,都需要加入一定的延迟时间呢?分析如下。 1 上电复位时序   在单片机及其应用电路每次上电的过程中,由于电源回路中通常存在一些容量大小不等的滤波电容,使得单片机芯片在其电源引脚VCC和VSS之间所感受到的电源电压值VDD,是从低到高逐渐上升的。该过程所持续的时间一般为1~100 ms(记作taddrise)。上电延时taddrise的定义是电源电压从10% VDD上升到90% VDD所需的时间,如图1所示。 图1 上电延时taddrise和起振延时tosc实
[单片机]
80C<font color='red'>51单片机</font>上电复位和复位延时的时序分析
基于51单片机的CAN总线技术及其应用
引言 1986年德国最大的工业企业之一Rober Bosch公司首次提出了应用于汽车内各种传感器和执行器之间相互通信的CAN总线(Controller AreaNetwork)技术以来,以其可靠性、实时性和灵活性强的特点,得到了诸多汽车开发商的青睐。本文介绍了CAN总线的通信协议,分析了CAN总线控制器SJA1000和驱动器PCA82C250的内部结构和工作原理,主要阐述了CAN总线技术在智能小区门禁控制系统中的应用。 1 CAN总线的特点 1.1 CAN总线的位数值表示与通信距离 CAN总线协议是建立在国际标准组织的开放系统OSI 7层互连参考模型基础之上的。其模型结构只有3层,即只取OSI底层的物理层、数据
[单片机]
基于<font color='red'>51单片机</font>的CAN总线技术及其应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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