| |
|
开发:
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例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |