0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ch422芯片驱动

Harmony&嵌入式学习 来源:Harmony&嵌入式学习 作者:Harmony&嵌入式学 2023-07-17 09:25 次阅读

CH422 芯片可以用于数码管显示驱动或者 I/O 扩展。CH422 内置时钟振荡电路,可以动态驱动 4 位数码管或者 32 只 LED 发光管;CH422 用于 I/O 扩展时,可以提供 8 个双向输入输出引脚和 4 个通 用输出引脚;CH422 通过 2 线串行接口单片机等交换数据。

wKgZomSzuiKAO47CAAIMph-zuqs517.png

C文件

/********************************** (C) COPYRIGHT *******************************
* File Name          : 422IF.C
* Author             : WCH
* Version            : V1.0
* Date               : 2014/03/18
* Description        : CH422 DEMO接口函数定义
*******************************************************************************/


/******************************************************************************/
/* 头文件包含 */
#include < 422CMD.H >
#include < reg52.h >
/******************************************************************************/


/*******************************************************************************
* Function Name  : mInitSTDIO
* Description    : 串口初始化函数,用于程序调试
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void	mInitSTDIO( )
{
	SCON = 0x50;
	PCON = 0x80;
	TMOD = 0x20;
	TH1 = 0xf3;                                                                  //24MHz晶振, 9600bps
	TR1 = 1;
	TI = 1;
}


/*******************************************************************************
* Function Name  : CH422_I2c_Start
* Description    : 两线模式启动信号
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void CH422_I2c_Start( void )                                            
{
    CH422_SDA_SET;                                                             // 发送起始条件的数据信号 
    CH422_SCL_SET;
    DELAY_0_1US;                                                               //根据单片机可选延时
    CH422_SDA_CLR;                                                             //发送起始信号
    DELAY_0_1US;      
    CH422_SCL_CLR;                                                             //钳住I2C总线,准备发送或接收数据 
}


/*******************************************************************************
* Function Name  : CH422_I2c_Stop
* Description    : 两线模式停止信号
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void CH422_I2c_Stop( void )    
{
    CH422_SDA_CLR;
    DELAY_0_1US;                                                               //根据单片机型号延时可选
    CH422_SCL_SET;
    DELAY_0_1US;
    CH422_SDA_SET;                                                             // 发送I2C总线结束信号
}


/*******************************************************************************
* Function Name  : CH422_I2c_WrByte
* Description    : 向CH422写入一个字节
* Input          : unsigned char dat
* Output         : None
* Return         : None
*******************************************************************************/
void CH422_I2c_WrByte( unsigned char dat )                                     // 写一个字节数据
{
    unsigned char i;
    for( i = 0; i != 8; i++ )                                                  // MCU输出8位数据
    {
        if( dat&0x80 )
        { 
            CH422_SDA_SET;
        }
        else
        {
            CH422_SDA_CLR;
        }
        DELAY_0_1US;
        CH422_SCL_SET;
        dat < <= 1;
        DELAY_0_1US;                                                           // 可选延时
        CH422_SCL_CLR;
    }
    CH422_SDA_SET;                                                             //SDA设为输入接收ACK信号
    DELAY_0_1US;
    CH422_SCL_SET;                                                             // 接收应答
    DELAY_0_1US;
    CH422_SCL_CLR;
}


/*******************************************************************************
* Function Name  : CH422_I2c_RdByte
* Description    : 从CH422读一个字节
* Input          : None
* Output         : None
* Return         : unsigned char dat
*******************************************************************************/
unsigned char CH422_I2c_RdByte(void)
{
	unsigned char dat,i;                                                        //注意SDA设置为输入方向接收数据
	CH422_SDA_SET;
	for(i = 0;i != 8;i++)
	{
        CH422_SCL_SET;
        DELAY_0_1US;
		    dat < <= 1;
		    if(CH422_SDA_IN)                                                       //读取一位数据 
				{
				    dat++;  
				}
				DELAY_0_1US;
		    CH422_SCL_CLR;
	}
	CH422_SDA_SET;
	DELAY_0_1US;
	CH422_SCL_SET;  
	DELAY_0_1US;
	CH422_SCL_CLR;
	
	return(dat);
}

/*******************************************************************************
* Function Name  : CH422_I2c_Write
* Description    : 向CH422写数据
* Input          : unsigned short cmd
* Output         : None
* Return         : None
*******************************************************************************/
void CH422_I2c_Write(unsigned short cmd)
{
	CH422_I2c_Start();                                                           //发送启动信号
	CH422_I2c_WrByte((unsigned char)(cmd >>8));                                   //先发高字节
	CH422_I2c_WrByte((unsigned char)cmd);
	CH422_I2c_Stop();                                                            //发送结束信号
}

/*******************************************************************************
* Function Name  : CH422_I2c_Read
* Description    : 从CH422读取键值
* Input          : None
* Output         : None
* Return         : unsigned char dat
*******************************************************************************/
unsigned char CH422_I2c_Read(void)
{
	unsigned char dat;
	
	CH422_I2c_Start();                                                           //发送启动信号
	CH422_I2c_WrByte((unsigned char)(CH422_GET_KEY>>8));                         //发送取键值命令码
	dat = CH422_I2c_RdByte();                                                    //接收键值
	CH422_I2c_Stop();                                                            //发送结束信号	
	
	return dat;
}

H文件

/********************************** (C) COPYRIGHT *******************************
* File Name          : 422CMD.H
* Author             : WCH
* Version            : V1.0
* Date               : 2014/03/18
* Description        : CH422 DEMO控制命令和接口函数声明
*******************************************************************************/


/******************************************************************************/
/* 头文件包含 */
#include < reg52.h >
#include < intrins.h >
#pragma NOAREGS	// 如果MCS51在中断服务程序中调用CH422子程序或者使用键盘中断功能,那么建议加入此编译选项
/******************************************************************************/


/******************************************************************************/
/* 延时0.1uS子程序,与单片机速度有关,对于双向I/O可以不需要延时,对于带上拉的准双向I/O建议加上延时 */
#define		DELAY_0_1US		{_nop_();}		                                         // MCS51>10MHz
/******************************************************************************/


/******************************************************************************/
/* 2线接口的连接,与实际电路有关 */
sbit	CH422_SCL=P1^0;
sbit	CH422_SDA=P1^1;
sbit	CH422_INT=P3^2;                                                          // 中断输出引脚
/******************************************************************************/


/******************************************************************************/
/* 2线接口的位操作,与单片机有关 */
#define		CH422_SCL_SET		{CH422_SCL=1;}
#define		CH422_SCL_CLR		{CH422_SCL=0;}
#define		CH422_SCL_D_OUT	{}				                                           // 设置SCL为输出方向,对于双向I/O需切换为输出
#define		CH422_SDA_SET		{CH422_SDA=1;}
#define		CH422_SDA_CLR		{CH422_SDA=0;}
#define		CH422_SDA_IN		(CH422_SDA)
#define		CH422_SDA_D_OUT	{}				                                           // 设置SDA为输出方向,对于双向I/O需切换为输出
#define		CH422_SDA_D_IN	{CH422_SDA=1;}	                                     // 设置SDA为输入方向,对于双向I/O需切换为输入
/******************************************************************************/

/******************************************************************************/
/* CH422的常用命令码*/
#define CH422_SYSON        0x4800                                              //设置系统参数
#define CH422_IO_OE_BIT    0x0001                                              //IO7-IO0双向输入输出引脚,位1允许输出
#define CH422_A_SCAN_BIT   0x0004                                              //控制动态扫描控制功能,为0启用IO扩展功能、为1数码管动态显示
#define CH422_OD_EN_BIT    0x0010                                              //OC0-OC3输出使能,为0推挽输出,为1是开漏输出
#define CH422_SLEEP_BIT    0x0080                                              //低功耗睡眠控制位
#define CH422_WR_OC        0x4600                                              //设置通用输出命令,需另加8位数据

#define CH422_GET_KEY	     0x4f00					                                     // 获取按键,返回按键代码
//加载段数据命令/设置双向输入输出命令
#define CH422_DIG0        0x7000					                                     // 数码管位0显示,需另加8位数据
#define CH422_DIG1        0x7200		                                           // 数码管位1显示,需另加8位数据
#define CH422_DIG2        0x7400		                                           // 数码管位2显示,需另加8位数据
#define CH422_DIG3        0x7600	                               	             // 数码管位3显示,需另加8位数据
//读取双向输入输出命令
#define CH422_RD_IO       0x4d00                                               //输入字节2为双向输入输出引脚IO7-IO0当前的引脚状态

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

/******************************************************************************/
//接口函数声明
extern	unsigned char CH422_I2c_Read(void);				                             // 从CH422读取按键代码
extern  void CH422_I2c_Write(unsigned short cmd);	                             // 向CH422发出操作命令
extern  void	mInitSTDIO( );                                                   //串口初始化函数
/******************************************************************************/

驱动程序

/******************************************************************************/
/* 头文件包含 */
#include < stdio.h >
#include "422CMD.H"
/******************************************************************************/


/******************************************************************************/
/*数码管显示的BCD译码表*/
const unsigned char BCD_decode_tab[0x10] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F, 0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71 };
/******************************************************************************/


/*******************************************************************************
* Function Name  : mDelaymS
* Description    : 延时函数
* Input          : unsigned char ms
* Output         : None
* Return         : None
*******************************************************************************/
void	mDelaymS( unsigned char ms )                                             // 延时毫秒 
{
	unsigned short i;
	while ( ms -- )
	{
		for(i=0;i!=1000;i++);
	}
}


/*******************************************************************************
* Function Name  : mian
* Description    : CH422功能演示,包括驱动数码管,睡眠等
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void main()
{
	
	mDelaymS(60);																																 //CH422上电复位时间
	mInitSTDIO();                                                                //初始化串口

	CH422_I2c_Write(CH422_SYSON | CH422_A_SCAN_BIT | CH422_IO_OE_BIT | CH422_OD_EN_BIT);//开显示

  CH422_I2c_Write(CH422_DIG0 | BCD_decode_tab[0]);
  CH422_I2c_Write(CH422_DIG1 | BCD_decode_tab[1]);
  CH422_I2c_Write(CH422_DIG2 | BCD_decode_tab[2]);
  CH422_I2c_Write(CH422_DIG3 | BCD_decode_tab[3]);
	
	while(1);                                                                    //读取键值
}



审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 振荡电路
    +关注

    关注

    17

    文章

    465

    浏览量

    98136
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
  • 数码管
    +关注

    关注

    31

    文章

    1827

    浏览量

    89949
  • 芯片驱动
    +关注

    关注

    0

    文章

    12

    浏览量

    14089
收藏 人收藏

    评论

    相关推荐

    CH422做拓展IO时IO7~IO0是否可部分配置为Input、部分配置为OUPUT?

    如题,如果需要使用CH422做拓展的IO口,其中我们知道IO7~IO0可以作为输入INPUT口或者输出OUPUT口,但是目前查看规格书和推荐的代码,都是初始化IO7~IO0为全部输入口或者全部输出
    发表于 10-11 08:27

    RTC芯片可以跟CH422共用一个I2C吗?

    我看到规格书CH422是没有地址的,我现在有一个有地址的RTC芯片,可以跟CH422共用一个I2C吗?
    发表于 10-12 07:04

    CH422 SDA和SCL可以直接连接单片机3.3V IO吗?

    我的单片机是3.3V ,CH422如果用5V供电,那么SDA 和SCL可以直接连接单片机3.3V IO吗?需要注意什么吗,谢谢
    发表于 10-12 07:20

    CH35芯片PCI驱动下载

    CH35芯片PCI驱动下载:CHINESE:PCISETUP.exe是PCI卡的驱动安装工具,您可以用这个工具来安装卡的驱动.相关文件说明-
    发表于 12-09 21:13 178次下载

    数码管驱动及键盘控制芯片--CH452

    数码管驱动及键盘控制芯片CH452:CH452是数码管显示驱动和键盘扫描控制芯片
    发表于 01-07 12:23 60次下载

    CH340驱动

    USB转串口芯片CH340的驱动,使用环境:windows
    发表于 12-10 17:23 68次下载

    USB芯片CH340CH341发卡器的驱动程序免费下载

    本文档的主要内容详细介绍的是USB芯片CH340CH341发卡器的驱动程序免费下载win7版本
    发表于 06-14 08:00 62次下载

    沁恒股份数码管显示驱动及I/O 扩展芯片:CH422概述

     CH422 芯片可以用于数码管显示驱动或者I/O 扩展。CH422 内置时钟振荡电路,可以动态驱动4位数码管或者32 只LED 发光管;
    的头像 发表于 11-11 16:23 3704次阅读
    沁恒股份数码管显示<b class='flag-5'>驱动</b>及I/O 扩展<b class='flag-5'>芯片</b>:<b class='flag-5'>CH422</b>概述

    CH422数码管显示驱动及IO扩展芯片的数据手册

    CH422 芯片可以用于数码管显示驱动或者 I/O 扩展。CH422 内置时钟振荡电路,可以动态驱动 4 位数码管或者 32 只 LED 发
    发表于 12-29 08:00 3次下载
    <b class='flag-5'>CH422</b>数码管显示<b class='flag-5'>驱动</b>及IO扩展<b class='flag-5'>芯片</b>的数据手册

    LCD显示驱动芯片CH463技术手册

    电子发烧友网站提供《LCD显示驱动芯片CH463技术手册.pdf》资料免费下载
    发表于 09-09 11:26 0次下载
    LCD显示<b class='flag-5'>驱动</b><b class='flag-5'>芯片</b><b class='flag-5'>CH</b>463技术手册

    LCD显示驱动芯片CH462技术手册

    电子发烧友网站提供《LCD显示驱动芯片CH462技术手册.pdf》资料免费下载
    发表于 09-09 10:45 2次下载
    LCD显示<b class='flag-5'>驱动</b><b class='flag-5'>芯片</b><b class='flag-5'>CH</b>462技术手册

    数码管驱动及键盘控制芯片CH451手册

    电子发烧友网站提供《数码管驱动及键盘控制芯片CH451手册.pdf》资料免费下载
    发表于 09-09 10:07 0次下载
    数码管<b class='flag-5'>驱动</b>及键盘控制<b class='flag-5'>芯片</b><b class='flag-5'>CH</b>451手册

    数码管驱动及键盘控制芯片CH450手册

    CH450 是数码管显示驱动和键盘扫描控制芯片CH450 内置时钟振荡电路,可以动态驱动 6 位数 码管或者 48 只 LED;同时还可
    发表于 09-09 09:47 0次下载
    数码管<b class='flag-5'>驱动</b>及键盘控制<b class='flag-5'>芯片</b><b class='flag-5'>CH</b>450手册

    数码管显示驱动及I/O扩展芯片CH422手册

    电子发烧友网站提供《数码管显示驱动及I/O扩展芯片CH422手册.pdf》资料免费下载
    发表于 09-09 09:44 2次下载
    数码管显示<b class='flag-5'>驱动</b>及I/O扩展<b class='flag-5'>芯片</b><b class='flag-5'>CH422</b>手册

    两线远程I/O扩展芯片CH423驱动程序

    CH423 是两线串行接口的通用远程I/O 扩展芯片CH423 提供8 个双向输入输出引脚和16 个通用输出引脚,支持输入电平变化中断;CH423 内置电流
    发表于 05-04 09:17 2次下载