51单片机+tm1620驱动3位数码管程序

  • 学习16472次

TM1620 是天微公司生产的二极管驱动芯片,SOP20封装。芯片如下图所示:

tm1620引脚图

最多可以驱动6个8位数码管,如下图所示:

tm1620驱动数码管

程序如下:

/**************************************************
?* 名称:STC51驱动TM1620 3位数码管显示
?* MCU: STC12C5608AD
?* 主频:12Mhz(外部接12MHz晶振)
?* 作者:Ration
?* 时间:2013年12月5日(整理)
?* 版权:版权归《单片机学习网》所有,传播请保持完整性
?*
?* 更多程序请访问:https://mrs.pub
?*************************************************/
#include "stc12c5608ad.h"
#include <intrins.h>

#define uint? unsigned int?? ? // 宏定义uint (0~65535)
#define uchar unsigned char? // 
#define uint32 unsigned long 


sbit STB =P3^2;??????? // 定义片选通讯口
sbit CLK =P3^3;??????? // 定义时钟通讯口
sbit DIO =P3^4;??????? // 定义数据输入/输出通讯口

uchar bai_num,shi_num,ge_num;


static uchar code LED_tab[11]={? // 定义数码管0~9数字码表
0x3f,??? //0B00111111,?????? //0
0x30,??? //0B00000110,?????? //1
0x6d,??? //0B01011011,?? ????? //2
0x79,??? //0B01001111,?? ??? ? //3
0x33,??? //0B01100110,?? ????? //4
0x5b,??? //0B01101101,?? ??? ? //5
0x5f,??? //0B01111101,?? ??? ? //6
0x70,??? //0B00000111,?? ????? //7
0x7f,??? //0B01111111,?? ??? ? //8
0x7B,??? //0B01101111,?? ??? ? //9
0x4f,?? ??? ??? ??? ??? ??? ? //E???? ??? ???? ??? ??? ??? ??? ??? ??? ??????? ?
};

void delay_ms(uchar cyc)
{
??? //当将=1的时候,延时1ms
??? uchar ii,jj;

??? for(jj=1;jj<=cyc;jj++)
??? {
??????? for(ii=0;ii<200;ii++)
??????? {
?? ??? ??? ?_nop_();
??????? }
??? }
}


void TM1620_Write(uchar wr_data)
{
?? ?uchar i;

?? ?for(i=0;i<8;i++)
?? ?{
?? ??? ?CLK = 0;
?? ??? ?if(wr_data&0x01)DIO = 1;
?? ??? ?else DIO = 0;
?? ??? ?CLK = 1;
?? ??? ?wr_data>>=1;
?? ?}??????????????? ?
}

void Write_COM(unsigned char cmd)?? ??? ?//发送命令字
{
?? ?STB = 0;
?? ?TM1620_Write(cmd);
?? ?STB = 1;
}

void init_TM1620(void)
{
?? ?Write_COM(0x44);? // 01000000准备写数据到显示寄存器,普通模式,自动地址增加
?? ?STB=0;
?? ?TM1620_Write(0xc0);?? ? // 11000000 设置显示地址从0开始
?? ?TM1620_Write(0x00);?? ?? // 所有显示为灭
?? ?STB=1;
?? ?STB=0;
?? ?TM1620_Write(0xc2);
?? ?TM1620_Write(0x00);
?? ?STB=1;
?? ?STB=0;
?? ?TM1620_Write(0xc4);
?? ?TM1620_Write(0x00);
?? ?STB=1;
?? ?Write_COM(0x8f);? // 最亮?? ?10001111 设置消光脉冲14/16 显示开
}

void led_show()
{
//?? ?Write_COM(0x44);? // 01000000准备写数据到显示寄存器,普通模式,自动地址增加
?? ?STB=0;
?? ?TM1620_Write(0xc0);?? ? // 11000000 设置显示地址从0开始
?? ?TM1620_Write(LED_tab[bai_num]);?? ?? // 所有显示为灭
?? ?STB=1;
?? ?STB=0;
?? ?TM1620_Write(0xc2);?? ? // 11000000 设置显示地址从0开始
?? ?TM1620_Write(LED_tab[shi_num]);?? ?? // 所有显示为灭
?? ?STB=1;?? ?
?? ?STB=0;
?? ?TM1620_Write(0xc4);?? ? // 11000000 设置显示地址从0开始
?? ?TM1620_Write(LED_tab[ge_num]);?? ?? // 所有显示为灭
?? ?STB=1;
}





void main()
{
?? ?CLK = 1;?? ??? ??? ?// 上拉TM1620通信时钟引脚
?? ?STB = 1;?? ??? ??? ?// 上拉TM1620通信片选引脚
?? ?DIO = 1;?? ??? ??? ?// 上拉TM1620通信数据引脚

?? ?init_TM1620();?? ?? // 初始化LED控制芯片
?? ?bai_num=0;
?? ?shi_num=0;
?? ?ge_num=0;
?? ?led_show();

?? ?while(1)
?? ?{
?? ??? ?;
?? ?}
}

完整keil工程文件,请按如下方法获取!
 

 

发表评论