搜索
bottom↓
回复: 12

MEGA8驱动TM1628的例子,已经调试通过!

[复制链接]

出0入0汤圆

发表于 2011-2-5 14:43:17 | 显示全部楼层 |阅读模式
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
http://www.hpinfotech.com

Project : TM1628-数码管驱动程序 (CVAVR 2.05)
Version : VER 1.0
Date    : 2011-02-01
Author  : SPC
Company : YANTAI
Comments:
Chip type           : ATmega8L
Program type        : Application
Clock frequency     : 1 MHz (内置默认熔丝位1M)
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>

#define uchar unsigned char  //字符类型转定义
#define uint  unsigned int  //字符类型转定义

//定义端口
#define TM_STB  PORTC.3
#define TM_CLK  PORTC.2
#define TM_DIO  PORTC.1
#define TM_DIO_P PINC.1


//定义数组
uchar  TAB_keynum[5];    //这5个数据来保存键值
#define knum1 TAB_keynum[0]
#define knum2 TAB_keynum[1]
#define knum3 TAB_keynum[2]
#define knum4 TAB_keynum[3]
#define knum5 TAB_keynum[4]



//共阴的数码管表格
//因为接法不同,如果显示乱码,请更新成自己的LED对应数据表

unsigned char TAB_duan[]={0xeb,0x88,0xd3,0xda,0xb8,0x7a,0x7b,0xc8,0xfb,0xfa,0xf9,0x3b,0x63,0x9b,0x73,0x71,0xb9,0x39,0x23,0x19,0xe9,0x1b,0xf1,0x11,0x33,0xab,0x10};

//0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,H,h,L,n,N,o,P,r,t,U,-,


/*********************************************************/
/* 初始化 */
/*********************************************************/

void TM1628_init()
{

    DDRC.3=1; //端口设置为输出
    DDRC.2=1; //端口设置为输出
    DDRC.1=1; //端口设置为输出

    TM_DIO=1;
    TM_STB=1;
    TM_CLK=1;

}


/*********************************************************/
/* 发送8位  */
/*********************************************************/

void WR_TM1628_Byte(uchar TM_dat)
{
    uchar i;
    for(i=0;i<8;i++)
    {
       TM_DIO=TM_dat&0x01;//强制转成:位,低位先发送
        TM_CLK=0;         //
        TM_dat>>=1;       //数据右移位
        TM_CLK=1;         //
    }
}


/*********************************************************/
/* 发送指令 */
/*********************************************************/

void Wr_TM_CMD(uchar TMcmd)
{
    TM_STB=0;   //片选,0有效
      WR_TM1628_Byte(TMcmd);
    TM_STB=1;   //片选,1无效
    TM_DIO=1;
}

/*********************************************************/
/* 读按键的位子函数 */
/*********************************************************/

uchar Read_TM_Byte()
  {
    uchar i,k;
    for(i=0;i<8;i++)
    {
         TM_CLK=0;
          k=k>>1;
         if(TM_DIO_P==1){k|=0x80;}//1000 0000
         TM_CLK=1;
    }
    return (k);
   }

/*********************************************************/
/* 读按键数值 */
/*********************************************************/

void Read_keynumber()//读TM1628的key值并入5个数组里面
{
    uchar i;
    TM_STB=0;    //片选,0有效

    WR_TM1628_Byte(0x42);//读键值命令0x42

    DDRC.1=0;    //置DIO端口为输入状态
    TM_DIO=1;    //置高

    for(i=0;i<5;i++)
    {
        TAB_keynum=Read_TM_Byte();//读key值
    }

    TM_STB=1;   //片选,置高,无效
    DDRC.1=1;   //端口状态恢复为输出
  }

/***************************************************************/
/* 显示程序 5位,可以加到7位       */
/*前4个是数码管,第五位管工作指示灯*/
/***************************************************************/

void TM1628_display(uchar dat1,uchar dat2,uchar dat3,uchar dat4,uchar dat5)
{
    Wr_TM_CMD(0x03);//显示模式
    Wr_TM_CMD(0x40);//地址自动加一

    TM_STB=0;           //片选,0有效

    WR_TM1628_Byte(0xc0);//地址0开始
    WR_TM1628_Byte(dat4);
    WR_TM1628_Byte(0xff);
    WR_TM1628_Byte(dat1);
    WR_TM1628_Byte(0xff);
    WR_TM1628_Byte(dat2);
    WR_TM1628_Byte(0xff);
    WR_TM1628_Byte(dat3);
    WR_TM1628_Byte(0xff);

    WR_TM1628_Byte(dat5);  //0x01-led1;0x02-led2;0x04-led3;0x08-led4
    WR_TM1628_Byte(0xff);  //led工作灯总开关


     TM_STB=1;        //片选,置高无效
    Wr_TM_CMD(0x88);  //显示开
}

/*********************************************************/
/* 主程序 */
/*********************************************************/

void main(void)
{
      delay_ms(300);  //延时启动
      TM1628_init();  //初始化

      //显示“12345”数字
      TM1628_display(TAB_duan[1],TAB_duan[2],TAB_duan[3],TAB_duan[4],TAB_duan[5]);

      delay_ms(1000);

while(1)
   {

       Read_keynumber();   //读键值
       //显示读出的键值
       TM1628_display(TAB_duan[knum1],TAB_duan[knum2],TAB_duan[knum3],TAB_duan[knum4],TAB_duan[knum5]);
    }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2011-2-5 14:45:48 | 显示全部楼层
找了很多帖子,没有一个能用的,今天自己调试了一个,放出来跟大家共享,希望大家一起共享源码。
TM1628数码管驱动程序,CVAVR2.05已经调试通过ourdev_614636C3H4SH.rar(文件大小:2K) (原文件名:TM1628.rar)

出0入0汤圆

发表于 2011-4-27 09:06:21 | 显示全部楼层
不错,多谢了!!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2011-4-27 09:37:25 | 显示全部楼层
准备要用上了!!

出0入0汤圆

发表于 2011-7-13 17:26:43 | 显示全部楼层
谢谢!搞了好长时间没有搞好

出0入0汤圆

发表于 2011-7-13 18:20:51 | 显示全部楼层
回复【1楼】ytspc
-----------------------------------------------------------------------

我水平差,搞了半天没有通过,

出0入0汤圆

发表于 2011-9-2 23:49:09 | 显示全部楼层
刚在电磁炉上看到这个芯片了,很强大哦

出0入0汤圆

发表于 2011-10-9 17:42:30 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2012-5-29 21:56:50 | 显示全部楼层
强烈要求楼主写个时钟

出0入0汤圆

发表于 2013-1-21 19:49:47 | 显示全部楼层
刚开始学习,谢谢楼主分享!

出0入85汤圆

发表于 2013-1-21 19:53:04 | 显示全部楼层
lz搞的费劲了,用同步模式输出即可,超级好用

出0入0汤圆

发表于 2013-4-12 10:32:10 来自手机 | 显示全部楼层
学习一下....
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 01:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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