打印
[控制方法]

CH452驱动4联数码管源程序

[复制链接]
716|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
踮脚蚂蚁|  楼主 | 2015-3-3 14:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CH452驱动4联数码管源程序
2008-03-14 18:10
/* ***********************************************************************
CH452的4线接法驱动4联共阴极LED数码管KeilC程序
Author: 王虎 2008.3.11
单片机:89S52
晶振:11.0592M
CH45X的4线接口,本电路中未接键盘扫描,接4位数码管,DOUT悬空,不含按键中断为3个I/O引脚。
****************************************************************************/
#include <regx51.h>
#include <ch452cmd.h> // CH452常量定义
#include <intrins.h>
/***********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);

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

14

帖子

0

粉丝