视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CH452驱动4联数码管源程序
2025-09-28 02:25:08 责编:小OO
文档
CH452驱动4联数码管源程序

2008-03-14 18:10

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

CH452的4线接法驱动4联共阴极LED数码管KeilC程序

Author: 王虎 2008.3.11

单片机:S52 

晶振:11.0592M

CH45X的4线接口,本电路中未接键盘扫描,接4位数码管,DOUT悬空,不含按键中断为3个I/O引脚。

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

#include

#include // CH452常量定义

#include

/***********CH452与单片机接线方式************/

sbit   CH452_DCLK=P1^7;                     // 串行数据时钟上升延激活

sbit   CH452_DIN=P1^6;                  // 串行数据输出,接CH452的数据输入

sbit   CH452_LOAD=P1^5;                     // 串行命令加载,上升延激活

//sbit   CH452_DOUT=P3^3;                     // INT1,键盘中断和键值数据输入,接CH452的数据输出 

/******** 4线接口的位操作,与单片机有关 *********/

#define   CH452_DCLK_SET   {CH452_DCLK=1;}

#define   CH452_DCLK_CLR   {CH452_DCLK=0;}

#define   CH452_DIN_SET   {CH452_DIN=1;}

#define   CH452_DIN_CLR   {CH452_DIN=0;}

#define   CH452_LOAD_SET   {CH452_LOAD=1;}

#define   CH452_LOAD_CLR   {CH452_LOAD=0;}

/******* 延时1uS子程序,主要用于2线接口,与单片机速度有关 ********/

//#define   DELAY_1US {}          // MCS51<=10MHz

#define   DELAY_1US   {_nop_();}      // MCS51<=20MHz

//#define   DELAY_1US {_nop_();_nop_();} // MCS51<=30MHz

/**************写12bit控制字函数*******************/

void CH452_Write(unsigned short cmd)

{

unsigned char i;

CH452_LOAD_CLR;            //命令开始,LOAD=0

for(i=0;i!=12;i++)    //送入12位数据,低位在前

{

//   if (cmd&1) {CH452_DIN_SET;}

//   else {CH452_DIN_CLR;} // 输出位数据

      CH452_DCLK_CLR; 

   CH452_DIN=cmd&1;    

    CH452_DCLK_SET;             //上升沿有效    

    cmd=cmd>>1;

}

CH452_LOAD_SET;         //加载数据,LOAD上升沿

DELAY_1US;     //命令数据加载周期不小于6US,CH451不需要该周期

DELAY_1US;

DELAY_1US;

}

/******************主函数******************************/

void main()

{

CH452_Write(CH452_RESET);

CH452_Write(CH452_BCD + 0x40);    // 选择BCD译码方式,扫描极限为4个数码管

CH452_Write(CH452_SYSON1);     // 开启显示

while (1)

{

CH452_Write(CH452_DIG3 | 1);

CH452_Write(CH452_DIG2 | 2);

CH452_Write(CH452_DIG1 | 3);

CH452_Write(CH452_DIG0 | 4); // 4位数码管显示字符1234 

// CH452_Write(CH452_RIGHTCYC);

下载本文
显示全文
专题