CH422 芯片可以用于數(shù)碼管顯示驅(qū)動或者 I/O 擴(kuò)展。CH422 內(nèi)置時鐘振蕩電路,可以動態(tài)驅(qū)動 4 位數(shù)碼管或者 32 只 LED 發(fā)光管;CH422 用于 I/O 擴(kuò)展時,可以提供 8 個雙向輸入輸出引腳和 4 個通 用輸出引腳;CH422 通過 2 線串行接口與單片機(jī)等交換數(shù)據(jù)。
C文件
/********************************** (C) COPYRIGHT *******************************
* File Name : 422IF.C
* Author : WCH
* Version : V1.0
* Date : 2014/03/18
* Description : CH422 DEMO接口函數(shù)定義
*******************************************************************************/
/******************************************************************************/
/* 頭文件包含 */
#include 422CMD.H?>
#include
/******************************************************************************/
/*******************************************************************************
* Function Name : mInitSTDIO
* Description : 串口初始化函數(shù),用于程序調(diào)試
* 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; // 發(fā)送起始條件的數(shù)據(jù)信號
CH422_SCL_SET;
DELAY_0_1US; //根據(jù)單片機(jī)可選延時
CH422_SDA_CLR; //發(fā)送起始信號
DELAY_0_1US;
CH422_SCL_CLR; //鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)
}
/*******************************************************************************
* Function Name : CH422_I2c_Stop
* Description : 兩線模式停止信號
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void CH422_I2c_Stop( void )
{
CH422_SDA_CLR;
DELAY_0_1US; //根據(jù)單片機(jī)型號延時可選
CH422_SCL_SET;
DELAY_0_1US;
CH422_SDA_SET; // 發(fā)送I2C總線結(jié)束信號
}
/*******************************************************************************
* Function Name : CH422_I2c_WrByte
* Description : 向CH422寫入一個字節(jié)
* Input : unsigned char dat
* Output : None
* Return : None
*******************************************************************************/
void CH422_I2c_WrByte( unsigned char dat ) // 寫一個字節(jié)數(shù)據(jù)
{
unsigned char i;
for( i = 0; i != 8; i++ ) // MCU輸出8位數(shù)據(jù)
{
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設(shè)為輸入接收ACK信號
DELAY_0_1US;
CH422_SCL_SET; // 接收應(yīng)答
DELAY_0_1US;
CH422_SCL_CLR;
}
/*******************************************************************************
* Function Name : CH422_I2c_RdByte
* Description : 從CH422讀一個字節(jié)
* Input : None
* Output : None
* Return : unsigned char dat
*******************************************************************************/
unsigned char CH422_I2c_RdByte(void)
{
unsigned char dat,i; //注意SDA設(shè)置為輸入方向接收數(shù)據(jù)
CH422_SDA_SET;
for(i = 0;i != 8;i++)
{
CH422_SCL_SET;
DELAY_0_1US;
dat <= 1;
if(CH422_SDA_IN) //讀取一位數(shù)據(jù)
{
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寫數(shù)據(jù)
* Input : unsigned short cmd
* Output : None
* Return : None
*******************************************************************************/
void CH422_I2c_Write(unsigned short cmd)
{
CH422_I2c_Start(); //發(fā)送啟動信號
CH422_I2c_WrByte((unsigned char)(cmd?>>8)); //先發(fā)高字節(jié)
CH422_I2c_WrByte((unsigned char)cmd);
CH422_I2c_Stop(); //發(fā)送結(jié)束信號
}
/*******************************************************************************
* 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(); //發(fā)送啟動信號
CH422_I2c_WrByte((unsigned char)(CH422_GET_KEY>>8)); //發(fā)送取鍵值命令碼
dat = CH422_I2c_RdByte(); //接收鍵值
CH422_I2c_Stop(); //發(fā)送結(jié)束信號
return dat;
}
H文件
/********************************** (C) COPYRIGHT *******************************
* File Name : 422CMD.H
* Author : WCH
* Version : V1.0
* Date : 2014/03/18
* Description : CH422 DEMO控制命令和接口函數(shù)聲明
*******************************************************************************/
/******************************************************************************/
/* 頭文件包含 */
#include
#include
#pragma NOAREGS // 如果MCS51在中斷服務(wù)程序中調(diào)用CH422子程序或者使用鍵盤中斷功能,那么建議加入此編譯選項(xiàng)
/******************************************************************************/
/******************************************************************************/
/* 延時0.1uS子程序,與單片機(jī)速度有關(guān),對于雙向I/O可以不需要延時,對于帶上拉的準(zhǔn)雙向I/O建議加上延時 */
#define DELAY_0_1US {_nop_();} // MCS51>10MHz
/******************************************************************************/
/******************************************************************************/
/* 2線接口的連接,與實(shí)際電路有關(guān) */
sbit CH422_SCL=P1^0;
sbit CH422_SDA=P1^1;
sbit CH422_INT=P3^2; // 中斷輸出引腳
/******************************************************************************/
/******************************************************************************/
/* 2線接口的位操作,與單片機(jī)有關(guān) */
#define CH422_SCL_SET {CH422_SCL=1;}
#define CH422_SCL_CLR {CH422_SCL=0;}
#define CH422_SCL_D_OUT {} // 設(shè)置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 {} // 設(shè)置SDA為輸出方向,對于雙向I/O需切換為輸出
#define CH422_SDA_D_IN {CH422_SDA=1;} // 設(shè)置SDA為輸入方向,對于雙向I/O需切換為輸入
/******************************************************************************/
/******************************************************************************/
/* CH422的常用命令碼*/
#define CH422_SYSON 0x4800 //設(shè)置系統(tǒng)參數(shù)
#define CH422_IO_OE_BIT 0x0001 //IO7-IO0雙向輸入輸出引腳,位1允許輸出
#define CH422_A_SCAN_BIT 0x0004 //控制動態(tài)掃描控制功能,為0啟用IO擴(kuò)展功能、為1數(shù)碼管動態(tài)顯示
#define CH422_OD_EN_BIT 0x0010 //OC0-OC3輸出使能,為0推挽輸出,為1是開漏輸出
#define CH422_SLEEP_BIT 0x0080 //低功耗睡眠控制位
#define CH422_WR_OC 0x4600 //設(shè)置通用輸出命令,需另加8位數(shù)據(jù)
#define CH422_GET_KEY 0x4f00 // 獲取按鍵,返回按鍵代碼
//加載段數(shù)據(jù)命令/設(shè)置雙向輸入輸出命令
#define CH422_DIG0 0x7000 // 數(shù)碼管位0顯示,需另加8位數(shù)據(jù)
#define CH422_DIG1 0x7200 // 數(shù)碼管位1顯示,需另加8位數(shù)據(jù)
#define CH422_DIG2 0x7400 // 數(shù)碼管位2顯示,需另加8位數(shù)據(jù)
#define CH422_DIG3 0x7600 // 數(shù)碼管位3顯示,需另加8位數(shù)據(jù)
//讀取雙向輸入輸出命令
#define CH422_RD_IO 0x4d00 //輸入字節(jié)2為雙向輸入輸出引腳IO7-IO0當(dāng)前的引腳狀態(tài)
/******************************************************************************/
/******************************************************************************/
//接口函數(shù)聲明
extern unsigned char CH422_I2c_Read(void); // 從CH422讀取按鍵代碼
extern void CH422_I2c_Write(unsigned short cmd); // 向CH422發(fā)出操作命令
extern void mInitSTDIO( ); //串口初始化函數(shù)
/******************************************************************************/
驅(qū)動程序
/******************************************************************************/
/* 頭文件包含 */
#include
#include "422CMD.H"
/******************************************************************************/
/******************************************************************************/
/*數(shù)碼管顯示的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 : 延時函數(shù)
* 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功能演示,包括驅(qū)動數(shù)碼管,睡眠等
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void main()
{
mDelaymS(60); //CH422上電復(fù)位時間
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); //讀取鍵值
}
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
振蕩電路
+關(guān)注
關(guān)注
17文章
501瀏覽量
98678 -
時鐘
+關(guān)注
關(guān)注
10文章
1714瀏覽量
131274 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1873瀏覽量
90865 -
芯片驅(qū)動
+關(guān)注
關(guān)注
0文章
12瀏覽量
14124
發(fā)布評論請先 登錄
相關(guān)推薦
CH422做拓展IO時IO7~IO0是否可部分配置為Input、部分配置為OUPUT?
如題,如果需要使用CH422做拓展的IO口,其中我們知道IO7~IO0可以作為輸入INPUT口或者輸出OUPUT口,但是目前查看規(guī)格書和推薦的代碼,都是初始化IO7~IO0為全部輸入口或者全部輸出
發(fā)表于 10-11 08:27
RTC芯片可以跟CH422共用一個I2C嗎?
我看到規(guī)格書CH422是沒有地址的,我現(xiàn)在有一個有地址的RTC芯片,可以跟CH422共用一個I2C嗎?
發(fā)表于 10-12 07:04
CH422 SDA和SCL可以直接連接單片機(jī)3.3V IO嗎?
我的單片機(jī)是3.3V ,CH422如果用5V供電,那么SDA 和SCL可以直接連接單片機(jī)3.3V IO嗎?需要注意什么嗎,謝謝
發(fā)表于 10-12 07:20
CH451中文資料手冊pdf(數(shù)碼管驅(qū)動及鍵盤控制芯片)
數(shù)碼管驅(qū)動及鍵盤控制芯片CH451中文手冊(第三版)CH451 是一個整合了數(shù)碼管顯示驅(qū)動和鍵盤掃描控制以及μP 監(jiān)控的多功能外圍
發(fā)表于 07-20 21:48
?918次下載
CH35芯片PCI驅(qū)動下載
CH35芯片PCI驅(qū)動下載:CHINESE:PCISETUP.exe是PCI卡的驅(qū)動安裝工具,您可以用這個工具來安裝卡的驅(qū)動.相關(guān)文件說明-
發(fā)表于 12-09 21:13
?178次下載
數(shù)碼管驅(qū)動及鍵盤控制芯片--CH452
數(shù)碼管驅(qū)動及鍵盤控制芯片CH452:CH452是數(shù)碼管顯示驅(qū)動和鍵盤掃描控制芯片。
發(fā)表于 01-07 12:23
?61次下載
新型的鍵盤顯示驅(qū)動芯片CH451的性能特點(diǎn)和工作原理
介紹一種新型的鍵盤顯示驅(qū)動芯片CH451的性能特點(diǎn)和工作原理,給出了CH451鍵盤顯示驅(qū)動芯片與
發(fā)表于 09-11 16:47
?67次下載
USB芯片CH340CH341發(fā)卡器的驅(qū)動程序免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是USB芯片CH340CH341發(fā)卡器的驅(qū)動程序免費(fèi)下載win7版本
發(fā)表于 06-14 08:00
?62次下載
沁恒股份數(shù)碼管顯示驅(qū)動及I/O 擴(kuò)展芯片:CH422概述
CH422 芯片可以用于數(shù)碼管顯示驅(qū)動或者I/O 擴(kuò)展。CH422 內(nèi)置時鐘振蕩電路,可以動態(tài)驅(qū)動4位數(shù)碼管或者32 只LED 發(fā)光管;
USB總線轉(zhuǎn)接芯片CH341的驅(qū)動免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是USB總線轉(zhuǎn)接芯片CH341的驅(qū)動免費(fèi)下載。
發(fā)表于 12-12 16:52
?24次下載
CH422數(shù)碼管顯示驅(qū)動及IO擴(kuò)展芯片的數(shù)據(jù)手冊
CH422 芯片可以用于數(shù)碼管顯示驅(qū)動或者 I/O 擴(kuò)展。CH422 內(nèi)置時鐘振蕩電路,可以動態(tài)驅(qū)動 4 位數(shù)碼管或者 32 只 LED 發(fā)
發(fā)表于 12-29 08:00
?3次下載
LCD顯示驅(qū)動芯片CH463技術(shù)手冊
電子發(fā)燒友網(wǎng)站提供《LCD顯示驅(qū)動芯片CH463技術(shù)手冊.pdf》資料免費(fèi)下載
發(fā)表于 09-09 11:26
?0次下載
LCD顯示驅(qū)動芯片CH462技術(shù)手冊
電子發(fā)燒友網(wǎng)站提供《LCD顯示驅(qū)動芯片CH462技術(shù)手冊.pdf》資料免費(fèi)下載
發(fā)表于 09-09 10:45
?2次下載
數(shù)碼管顯示驅(qū)動及I/O擴(kuò)展芯片CH422手冊
電子發(fā)燒友網(wǎng)站提供《數(shù)碼管顯示驅(qū)動及I/O擴(kuò)展芯片CH422手冊.pdf》資料免費(fèi)下載
發(fā)表于 09-09 09:44
?2次下載
評論