IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 读写24C64 TM1638数码管显示、矩阵按键模块 -> 正文阅读

[嵌入式]读写24C64 TM1638数码管显示、矩阵按键模块

bit I2C_Start(void) {

? ? delay_us(10);

? ? I2C_SDA =1;

? ? delay_us(10);

? ? I2C_SCK =1;

? ? delay_us(10);

? ? if ( I2C_SDA == 0) return 0;

? ? if ( I2C_SCK == 0) return 0;

? ? I2C_SDA = 0;

? ? delay_us(10);

? ? I2C_SCK = 0;

? ? delay_us(10);

? ? return 1;

}

void? I2C_Stop(void) {

? ? delay_us(10);

? ? I2C_SDA = 0;

? ? delay_us(10);

? ? I2C_SCK = 1;

? ? delay_us(10);

? ? I2C_SDA = 1;

? ? delay_us(10);

}

void I2C_Ack(void)? {

? ? delay_us(10);

? ? I2C_SDA=0;

? ? delay_us(10);

? ? I2C_SCK=1;

? ? delay_us(10);

? ? I2C_SCK=0;

? ? delay_us(10);

}

void I2C_Nack(void) {

? ? delay_us(10);

? ? I2C_SDA=1;

? ? delay_us(10);

? ? I2C_SCK=1;

? ? delay_us(10);

? ? I2C_SCK=0;

? ? delay_us(10);

}

bit I2C_Send_Byte( uchar d) {

? ? uchar i = 8;

? ? bit bit_ack;

? ? while( i-- )? {

? ? ? ? delay_us(10);

? ? ? ? if (d & 0x80 )? ?I2C_SDA =1;

? ? ? ? else? ? ? ? ? ? ?I2C_SDA =0;

? ? ? ? delay_us(10);

? ? ? ? I2C_SCK = 1;

? ? ? ? delay_us(10);

? ? ? ? I2C_SCK = 0;

? ? ? ? d = d << 1;

? ? }

? ? delay_us(10);

? ? I2C_SDA = 1;

? ? delay_us(10);

? ? I2C_SCK = 1;

? ? delay_us(10);

? ? bit_ack = I2C_SDA;

? ? I2C_SCK =0;

? ? delay_us(10);

? ? return bit_ack;

}

uchar I2C_Receive_Byte(void) {

? ? uchar i = 8, d;

? ? delay_us(10);

? ? I2C_SDA = 1;

? ? while ( i--)? ? ?{

? ? ? ? d = d << 1;

? ? ? ? delay_us(10);

? ? ? ? I2C_SCK =1;

? ? ? ? if ( I2C_SDA ) d++;

? ? ? ? delay_us(10);

? ? ? ? I2C_SCK =0;

? ? }

? ? return d;

}

void AT24C64_W(void *mcu_address,uint AT24C64_address,uint count)? {

? ? I2C_WP=0;

? ? while(count--)? ? ? {

? ? ? ? I2C_Start();

? ? ? ? /*I2C_Send_Byte( 0xa0 + AT24C64_address /256 *2);*/? /* 24C16? USE */

? ? ? ? I2C_Send_Byte( 0xa0 );

? ? ? ? I2C_Send_Byte(? AT24C64_address/256 );

? ? ? ? I2C_Send_Byte( AT24C64_address %256 );

? ? ? ? I2C_Send_Byte( *(uchar*)mcu_address );

? ? ? ? I2C_Stop();

? ? ? ? delay_ms(10);? ? ? ?/* waiTIng for write cycle to be completed */

? ? ? ? ((uchar*)mcu_address)++;

? ? ? ? AT24C64_address++;

? ? }

? ? I2C_WP=1;

}

//?

void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count) {

? ? while(count--) {

? ? ? ? I2C_Start();

? ? ? ? /*I2C_Send_Byte( 0xa0 + AT24C64_address / 256 *2 );*/? ?/* 24C16 USE */

? ? ? ? I2C_Send_Byte( 0xa0 );

? ? ? ? I2C_Send_Byte( AT24C64_address/256 );

? ? ? ? I2C_Send_Byte( AT24C64_address % 256 );

? ? ? ? I2C_Start();

? ? ? ? /*I2C_Send_Byte( 0xa1 + AT24C64_address /256 *2 );*/

? ? ? ? I2C_Send_Byte( 0xa1 );

? ? ? ? *(uchar*)mcu_address = I2C_Receive_Byte();

? ? ? ? I2C_Nack();

? ? ? ? I2C_Stop();

? ? ? ? ((uchar*)mcu_address)++;

? ? ? ? AT24C64_address++;

? ? }

}

void TM1638_Write(unsigned char DATA) //写数据函数

{

unsigned char i;

for(i=0;i<8;i++)

{

CLK=0;

if(DATA&0X01)

DIO=1;

else

DIO=0;

DATA>>=1;

CLK=1;

}

}

unsigned char TM1638_Read(void) //读数据函数

{

unsigned char i;

unsigned char temp=0;

DIO=1; //设置为输入

for(i=0;i<8;i++)

{

temp>>=1;

CLK=0;

if(DIO)

temp|=0x80;

CLK=1;

}

return temp;

}

void Write_COM(unsigned char cmd) //发送命令字

{

STB=0;

TM1638_Write(cmd);

STB=1;

}

unsigned char Read_key(void)

{

unsigned char c[4],i,key_value=0;

STB=0;

TM1638_Write(0x42);

delay_ms(100);

for(i=0;i<4;i++)

c[i]=TM1638_Read();

STB=1; //4个字节数据合成一个字节

if(c[0]==0x04) key_value=1;

if(c[0]==0x40) key_value=2;

if(c[1]==0x04) key_value=3;

if(c[1]==0x40) key_value=4;

if(c[2]==0x04) key_value=5;

if(c[2]==0x40) key_value=6;

if(c[3]==0x04) key_value=7;

if(c[3]==0x40) key_value=8;

if(c[0]==0x02) key_value=9;

if(c[0]==0x20) key_value=10;

if(c[1]==0x02) key_value=11;

if(c[1]==0x20) key_value=12;

if(c[2]==0x02) key_value=13;

if(c[2]==0x20) key_value=14;

if(c[3]==0x02) key_value=15;

if(c[3]==0x20) key_value=16;

? ? delay_ms(100);

return (key_value);

}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:53:26  更:2022-02-05 21:54:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:46:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码