找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4314|回复: 0
打印 上一主题 下一主题
收起左侧

TM1640与PIC12F629单片机的结合

[复制链接]
跳转到指定楼层
楼主
ID:215984 发表于 2018-8-31 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TM1640是驱动数码管的专用集成电路,可以直接驱动16位共阴数码管,手册请下载附件。
/*******************************
*本程序直接驱动16位共阴数码管,各数码管分别驱动0、1、2、……E、F。
*/
#include <pic.h>  //PIC12F629

__CONFIG(0x3F84);

#define clk GPIO0  //时钟信号
#define dio GPIO1   //数据/地址数据
#define uchar unsigned char
#define uint unsigned int
                                                                                                                                                                 //共阴极数码管
const uchar SEGData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};//1-9-F-不输出
//uchar weidata[4];//位变量
//uchar timecnt,keyzh,dpFlag = 0; //控制第二个数码管的dp的显示
//char time, sec;
void init(void);
void Delay_us(uint); //nus 延时
void tm1640_start(void);//1640开始
void tm1640_stop(void);  //1640停止
void tm1640_wrbyte(uchar); //写一个字节
void tm1640_display(void); //写显示寄存器 并开显示

///=============================================
void main(void)
{

init(); //初始化

while(1)
{
  tm1640_display(); //写寄存器并开显示
}
}

///=======================================
void Delay_us(uint i) //nus 延时
{
  uchar x;              
for(;i>0;i--)
for(x=0;x<3;x++) asm("NOP");
}
///======================================
void tm1640_start(void) //1640开始
{
  clk=1;
   dio=1;
   Delay_us(2);
  dio = 0;
}

void tm1640_stop(void)  //1640停止
{
clk = 0;
  Delay_us(2);
   dio = 0;
    Delay_us(2);
   clk = 1;
  Delay_us(2);
dio = 1;
}
//=========================
void tm1640_wrbyte(uchar oneByte) //写一个字节
{
  uchar i;
  for(i=0;i<8;i++)
  {
   clk = 0;
   Delay_us(2);
   if(oneByte&0x01) dio = 1; //低位在前
    else dio = 0;
    Delay_us(3);
    oneByte=oneByte>>1;
    clk=1;
    Delay_us(3);
   }
}
//======================
void tm1640_display(void) //写显示寄存器 并开显示
{
uchar i;
tm1640_start();
  tm1640_wrbyte(0x40);// 40H 地址自动加 1 模式,44H 固定地址模式,本程序采用自加 1 模式
   tm1640_stop();
  tm1640_start();
tm1640_wrbyte(0xc0);//设置首地址
for(i=0;i<16;i++)//地址自加,不必每次都写地址。
  {
   tm1640_wrbyte(SEGData[i]); //送数据
  }
  tm1640_stop();
   tm1640_start();
   tm1640_wrbyte(0x8a);//开显示 ,亮度:14/16
  tm1640_stop();
}
///================================================
void init(void)  //初始化程序
{
OPTION=0x80; //禁止弱上拉
WPU= 0x00; //关闭弱上拉
  INTCON = 0X00; //开总中断和T1中断
   TRISIO=0x08; //IO 口做输出
  //IOCB = 0X00; //电平变化触发中断;全关
    CMCON=0x07; // 设置全部为普通数字IO口 关闭所有比较器
   GPIO=0x08; //端口0 输出低电平
}

LED数码管驱动ICTM1640_V1.1.pdf

280.3 KB, 下载次数: 27, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表