视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
tm1637通讯程序
2025-10-05 11:21:00 责编:小OO
文档


#include

#include

#define nop _nop_();

#define uchar unsigned char

#define uint unsigned int

sbit stb =P1^0;//定义片选通讯口

sbit clk =P1^1;//定义时钟通讯口

sbit dio =P1^3;//定义数据输入/输出通讯口

bdata unsigned char y;//定义可以位寻址的两个全局变量

sbit y7=y^7;

uchar show_L;

//----------给IC写数据(包括8位数据,ACK应答信号)--

void write(uchar wr_data)

{

unsigned int i,count1;

for(i=0;i<8;i++)//开始传送8位数据,每循环一次传送一位数据

{

clk =0;

nop;

nop;

wr_data >>= 1;//移位数据,低位在前!

nop;

dio = CY;

nop;

nop;

clk =1;

nop;

nop;

}

//8位数据传送完1

clk = 0;//判断芯片发过来的ACK应答信号

nop;

nop;

dio = 1;

nop;

nop ;

clk = 1;

nop;

nop;

while(dio)

{

count1 +=1;

if(count1 ==200)

{

dio =0;

count1 =0;

}

}

nop;

nop; //ACK应答信号

}

//---------读按键数据子程序-----------

unsigned char read()

{

uchar count,x;

nop;

nop;

clk = 0;

for(x=0;x<8;x++) //读按键数据开始

{

clk = 0;

nop;

if(dio==1)

{

y7 = 1;

}

else

{

y7 = 0;

}

clk = 1;

nop;

nop;

if(x!=7){y=(y>>1);}//读按键时,不需要开始信号,直接读8位数据。

}

clk = 0;

nop;

nop;

dio = 1;

nop;

nop ;

clk = 1;

nop;

nop;

nop;

while(dio)

{

count +=1;

if(count ==200)

{

dio =0;

count =0;

}

}

nop;

nop; //ACK应答信号

return(y);

}

//---------开始信号------------------

void start()

{

clk = 1;//给芯片发送开始信号

dio = 1;

nop;

nop;

dio = 0;

nop;

nop ;

clk = 0;//开始信号传送完

nop;

}

//---------结束信号-------------------

void stop()

{

clk = 0;

nop;

nop;

dio = 0;

nop;

nop;

clk = 1;

nop;

nop;

nop;

dio = 1;

}

//----------显示子函数------------

void xianshi(uchar SHOW_L)

{

uchar a=0;

dio = 1;

clk = 1;

start(); //调用开始信号

write(0x40);//写命令40H(数据设置),地址自动加一

stop(); //调用结束信号,一个字节命令发送完毕,可以发送下一个命令

nop;

nop;

nop;

nop;

start(); //调用开始信号

write(0xc0);//写起始地址命令(0C0H),地址从00H单元开始。

for(a=0;a<6;a++)

{

write(SHOW_L);//给显示寄存器写显示数据,值可根据实参改变

}

stop(); //将所有数据送完后,发结束信号,可以发送下一条命令

nop;

nop;

nop;

start(); //调用开始信号

write(0x8b); //送开屏命令,(8BH),亮度可以根据低三位调节。

stop(); //调用结束信号,一个字节命令发送完毕,可以发送下一个命令

}

void main()

{

P1=0x

ff;//初始化单片机I/O口

xianshi(show_LED);

}

}下载本文

显示全文
专题