|
- #include "reg51.h"
- #include "tm1638.h"
- void DelayMs(unsigned int ms);
- void DelayMs(unsigned int ms)
- {
- unsigned int i,j;
- for(i=0;i<ms;i++)
- for(j=0;j<200;j++);
-
- }
- void main(void)
- {
- unsigned char i;
- init_TM1638(); //初始化TM1638
- for(i=0;i<8;i++)
- Write_Data(i,dis[10]); //初始化寄存器
- /***************************************
- 选中GRID1 令第一位数码管显示0
- 第二位数码管显示1
- ......
- 下面是各数码管编号
- 0xC0,0xC2,0xC4,0xC6,0xC8,0xCA,0xCC,0xCE
- 下面是各LED编号
- 0xC1,0xC3,0xC5,0xC7,0xC9,0xCB,0xCD,0xCF
- ****************************************/
- while(1)
- {
- for(i=0;i<8;i++){
- Write_Data(0xC0+i*2,dis[i]); //轮显各数码管
- DelayMs(200); //轮显各LED
- Write_Data(0xC0+i*2+1,0xff);
- DelayMs(500);
- }
- Write_Command(0x80);
- DelayMs(500);
- init_TM1638();
- }
- }
复制代码- #ifndef _TM1638_H
- #define _TM1638_H
- #include "reg51.h"
- //TM1638模块引脚定义
- sbit DIO=P1^3; //数据线
- sbit CLK=P1^2; //时钟线
- sbit STB=P1^1; //片选线
- //共阴数码管显示代码
- unsigned char code dis[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
- 0x7F,0x6F,0x00};
- void TM1638_Write(unsigned char Data) //写数据函数
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- CLK=0;
- DIO=Data&0x01;
- Data>>=1;
- CLK=1;
- }
- }
- void Write_Command(unsigned char Command) //发送命令
- {
- STB=0;
- TM1638_Write(Command);
- STB=1;
- }
- void Write_Data(unsigned char add,unsigned char Data) //指定地址写入数据
- {
- STB=0;
- TM1638_Write(0x00|add);
- TM1638_Write(Data);
- STB=1;
- }
- //TM1638初始化函数
- void init_TM1638(void)
- {
- unsigned char i;
- Write_Command(0x8F);
- Write_Command(0x40); //采用地址自动加1
- STB=0;
- TM1638_Write(0xc0); //设置起始地址
- for(i=0;i<16;i++) //传送16个字节的数据
- TM1638_Write(0x00);
- STB=1;
- }
- #endif
复制代码 |
评分
-
查看全部评分
|