搜索
bottom↓
回复: 7

atmega16 tm1628 四位数码管 驱动 OK

[复制链接]

出0入0汤圆

发表于 2011-10-25 21:05:30 | 显示全部楼层 |阅读模式
TM1628 测试没有问题  gcc avr   网络上的程序 经过更改把里面的数据位更改过,,,自己用的时候 请自己更改查表值
//*****************************************************************************/



/*
编译环境,winavr 2004
内部 1 m
2011年10月25日21时00分58秒




*/
#include <avr/io.h>

#include <avr/delay.h>



#define uint unsigned int
#define uchar unsigned char

#define  HIGH     1
#define  LOW      0
#define  TRUE      1
#define  FALSE      0
#define  ZERO      0
#define  MSB       0x80
#define  LSB       0x01

#define  DECODE_MODE   0x09
#define  INTENSITY     0x0A
#define  SCAN_LIMIT    0x0B
#define  SHUT_DOWN     0x0C
#define  DISPLAY_TEST  0x0F

#define  STB PB2
#define  CLK PB1
#define  DATA PB0

uchar  address_1[]={0x01,0x02,0x04,0x08};
uchar  dat_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};        //共阳

uchar  address_2[]={0xfe,0xfd,0xfb,0xf8};
uchar  dat_2[]={0xeb,0x41,0xe6,0x67,0x4d,0x2f,0xaf,0x61,0xef,0x6f,0xff,0xff,0xff,0xff,0xff,0xff,0x00};        //共阴

uint ad_data,i,k,l,num;
uint wanwei,qianwei,baiwei,shiwei,gewei;
void delay_ms(uint ms)
{
uint x,y;
for(x=0;x<ms;x++)
    for(y=0;y<1141;y++);
}
//test program display from 1~

void Write_sm1628_byte(unsigned char temp)
{
unsigned char i,t;
for (i=0;i<8;i++)     
  {   
     t=(temp&LSB);
     
         if(t==0x01)
                  PORTB|=(1<<DATA);   //DIN
         else
                  PORTB&=~(1<<DATA);  //clk=0  
         PORTB&=~(1<<CLK);
         temp>>=1;                     
         PORTB|=(1<<CLK);
  }
}

void Write_sm1628(unsigned char command)
{
   PORTB&=~(1<<STB);
   Write_sm1628_byte(command);
   PORTB|=(1<<STB);
   PORTB|=(1<<DATA);         
}

void init_sm1628(void)      
{
PORTB|=(1<<CLK);
PORTB|=(1<<STB);
PORTB|=(1<<DATA);
}
void display_1()
{
uint y,j=0;
Write_sm1628(0x03);   //设置显示模式
Write_sm1628(0x40);   //数据设置  //地址设定
PORTB&=~(1<<STB);
Write_sm1628_byte(0xc0);
for(y=0;y<4;y++)
{
Write_sm1628_byte(dat_2[j]);
Write_sm1628_byte(0xff);
j++;
}
PORTB|=(1<<STB);

Write_sm1628(0x8f);
j=0;
delay_ms(900);

PORTB&=~(1<<STB);
Write_sm1628_byte(0xc0);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
for(y=0;y<3;y++)
{
Write_sm1628_byte(dat_2[j]);
Write_sm1628_byte(0xff);
j++;
}
PORTB|=(1<<STB);
j=0;
delay_ms(900);

PORTB&=~(1<<STB);
Write_sm1628_byte(0xc0);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
for(y=0;y<2;y++)
{
Write_sm1628_byte(dat_2[j]);
Write_sm1628_byte(0xff);
j++;
}
PORTB|=(1<<STB);
j=0;
delay_ms(900);

PORTB&=~(1<<STB);
Write_sm1628_byte(0xc0);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(dat_2[j]);
Write_sm1628_byte(0xff);
PORTB|=(1<<STB);
j=3;
delay_ms(900);

PORTB&=~(1<<STB);
Write_sm1628_byte(0xc0);
Write_sm1628_byte(dat_2[j]);
Write_sm1628_byte(0xff);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
PORTB|=(1<<STB);
j=2;
delay_ms(900);

PORTB&=~(1<<STB);
Write_sm1628_byte(0xc0);
for(y=0;y<2;y++)
{
Write_sm1628_byte(dat_2[j]);
Write_sm1628_byte(0xff);
j++;
}
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);

PORTB|=(1<<STB);
j=1;
delay_ms(900);

PORTB&=~(1<<STB);
Write_sm1628_byte(0xc0);
for(y=0;y<3;y++)
{
Write_sm1628_byte(dat_2[j]);
Write_sm1628_byte(0xff);
j++;
}
Write_sm1628_byte(0x00);
Write_sm1628_byte(0x00);

PORTB|=(1<<STB);
delay_ms(900);
}

void display_2(uint m,uint n,uint k,uint l)
{
uint z;
Write_sm1628(0x03);   //设置显示模式
Write_sm1628(0x40);   //数据设置  //地址设定
for(z=0;z<5;z++)
{
PORTB&=~(1<<STB);

Write_sm1628_byte(0xc0);
Write_sm1628_byte(dat_2[l]);
Write_sm1628_byte(0xff);
Write_sm1628_byte(dat_2[k]);
Write_sm1628_byte(0xff);
Write_sm1628_byte(dat_2[n]);
Write_sm1628_byte(0xff);
Write_sm1628_byte(dat_2[m]);
Write_sm1628_byte(0xff);

PORTB|=(1<<STB);
}
//trans();
//display();
//init_display();     
Write_sm1628(0x8f);  
}
void main()
{
uint r;
DDRB=0xff;
init_sm1628();
for(r=0;r<3;r++)
{
display_1();
}
while(1)
{
num++;
display_2(num/1000,num/100%10,num/10%10,num%10);
delay_ms(100);
if(num==10000)
num=0;
}
}

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-1-2 17:38:11 | 显示全部楼层
......好久没有看了,,看看啊

出0入0汤圆

发表于 2012-1-3 13:37:54 | 显示全部楼层
就是判断时间

出0入0汤圆

 楼主| 发表于 2012-2-6 08:27:17 | 显示全部楼层
测试按键的读中,,,,,等待测试.....

出0入0汤圆

发表于 2012-3-31 15:37:29 | 显示全部楼层
楼主能附带电路图么?

出0入0汤圆

发表于 2012-5-29 22:00:07 | 显示全部楼层
时钟搞个好不

出0入0汤圆

 楼主| 发表于 2012-12-13 10:56:46 | 显示全部楼层
按键读取.网络上都有有的,,但这个可能要更改点东西..

uchar KEY[5]={0}; //为存储按键值开辟的数组
uchar  dat_2[]={0x6f,0x48,0x57,0x5e,0x78,0x3e,0x3f,0x4a,0x7f,0x7e,0x00,0x01,0x20,0x08,0x04,0x80,0x00,0x20,0xae,0xff,0xe7,0xec,0xa9,0xce,0xe9,0xe1}; //共阴
/*******显示的定义*/
//读取按键值并存入KEY[]数组,从低字节开始,从低位开始----
void Read1628_key(void)
{
  uchar i,j;
          STBIO|=(1<<STB);
     STBIO&=~(1<<STB);
   Write_sm1628_byte(0x42);
   
         PC_DDR &=~ (1<<7);//内部上拉
   


          for(j=0;j<5;j++)//连续读取5个字节
   {
            for(i=0;i<8;i++)
      {
         KEY[j]=KEY[j]>>1;
         CLK2IO&=~(1<<CLK2);
               CLK2IO&=~(1<<CLK2);
                                 CLK2IO&=~(1<<CLK2);
                                 CLK2IO|=(1<<CLK2);
               CLK2IO|=(1<<CLK2);
                                 CLK2IO|=(1<<CLK2);
         CLK2IO|=(1<<CLK2);
         if(READKEYPORTBIT)
           KEY[j]=KEY[j]|0X80;
        }
        }
         for (j=0;j<5;j++)
         {
          KEY[j]=~KEY[j];
         }
   STBIO|=(1<<STB);  
         PC_DDR |= (1<<7);
}

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

本版积分规则

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

GMT+8, 2024-7-24 05:16

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

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