摘要:數據的輸入總是低位在前高位在后傳輸數據輸入的開始條件是為高電平時,由高變低結束條件是為高時,由低電平變為高電平。
?寫 SRAM 數據地址自動加 1 模式:
#include "my_iic.h"#include "sys.h"#include "intrins.h"#define out_H 1#define out_L 0void myI2C_delay_us(unsigned int us){ while(us--){ _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); }}#if(1)/************************************************************************************************函數名 :*函數功能描述 :*函數參數 :*函數返回值 :*作者 :*函數創建日期 :20210928*函數修改日期 :*修改人 :*修改原因 :*版本 :*歷史版本 :***********************************************************************************************/void myI2c_Start(void){ MY_SCL_Port = out_H; myI2C_delay_us(2); MY_SDA_Port = out_L; myI2C_delay_us(2); }/************************************************************************************************函數名 :*函數功能描述 :*函數參數 :*函數返回值 :*作者 :*函數創建日期 :20210928*函數修改日期 :*修改人 :*修改原因 :*版本 :*歷史版本 :***********************************************************************************************/void myI2c_Stop(void){// myI2C_delay_us(200); MY_SCL_Port = out_L;// myI2C_delay_us(2); MY_SDA_Port = out_L; myI2C_delay_us(2); MY_SCL_Port = out_H;// myI2C_delay_us(2); MY_SDA_Port = out_H; myI2C_delay_us(2); }/************************************************************************************************函數名 :*函數功能描述 :*函數參數 :*函數返回值 :*作者 :*函數創建日期 :20210928*函數修改日期 :*修改人 :*修改原因 :*版本 :*歷史版本 :***********************************************************************************************/void myI2c_sendByte(unsigned char dat){ char i=0; for(i=0;i<8;i++){ MY_SCL_Port = out_L; myI2C_delay_us(1); if(dat&0x01){ MY_SDA_Port = out_H; } else { MY_SDA_Port = out_L; } myI2C_delay_us(1); MY_SCL_Port = out_H; dat>>=1; myI2C_delay_us(2); } MY_SCL_Port = out_L; myI2C_delay_us(2);}#endif#if(0) //2021-09-29 20:00void myI2c_Start(void){ MY_SDA_Port = out_H; MY_SCL_Port = out_H; _nop_(); _nop_(); MY_SDA_Port = out_H; _nop_(); _nop_(); MY_SDA_Port = out_L; _nop_(); _nop_(); _nop_(); _nop_(); MY_SCL_Port = out_L; _nop_(); _nop_(); }void myI2c_Stop(void){ MY_SCL_Port = out_H;// _nop_(); _nop_(); MY_SDA_Port = out_L; _nop_(); _nop_(); MY_SDA_Port = out_H;// _nop_(); _nop_(); MY_SCL_Port = out_L; _nop_(); _nop_(); MY_SDA_Port = out_L; }void myI2c_sendByte(unsigned char dat){ char i=0; for(i=0;i<8;i++){ MY_SCL_Port = out_L; if(dat&0x01){ MY_SDA_Port = out_H; } else { MY_SDA_Port = out_L; } _nop_(); _nop_(); _nop_(); MY_SCL_Port = out_H; dat>>=1; } MY_SCL_Port = out_L; _nop_(); _nop_(); _nop_(); MY_SDA_Port = out_L; }#endifvoid myI2c_cmdSend(unsigned char cmd){ myI2c_Start(); myI2c_sendByte(cmd); myI2c_Stop();} void myI2c_nbByte(unsigned char cmd,unsigned char *str,unsigned char len){ unsigned char i=0; myI2c_Start(); myI2c_sendByte(cmd); for(i=0;i
顯示驅動
#include "FZHxxx.h"#include "my_iic.h"#include "intrins.h"uint8_t code SEG_CODE[16]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uint8_t fzh_light_grade = 0x8c;int8_t fzh_WriteSram( uint8_t cmd1,uint8_t cmd2,uint8_t* str,uint8_t len,uint8_t cmd3 ) { if( ( len==0 )||( len>16 ) ) { return -1; } myI2c_cmdSend( cmd1 ); myI2c_nbByte(cmd2,str,len ); myI2c_cmdSend( cmd3 ); return 0;}int8_t fzh_cmdWrite( uint8_t cmd ) { myI2c_cmdSend( cmd ); return 0;}int8_t fzh_cmdWriteDat( uint8_t cmd,uint8_t dat ) { myI2c_nbByte( cmd,&dat,1 ); return 0;}void fzh_desplay( uint8_t nb2,uint8_t nb1, uint8_t nb0 ) { uint8_t temp_buff[8]; uint8_t Nunber_Size; Nunber_Size =sizeof( SEG_CODE ); if( Nunber_Size>(nb0&0x7f)) { nb0 &= ~0x7f; nb0 |= Nunber_Size; } if( Nunber_Size>nb1 ){ nb1 &= ~0x7f; nb1 |= Nunber_Size; } if( Nunber_Size>nb2 ) { nb2 &= ~0x7f; nb2 |= Nunber_Size; } (nb0>=0x7f)? temp_buff[0] = (SEG_CODE[nb0]|0x80):SEG_CODE[nb0]; (nb1>=0x7f)? temp_buff[0] = (SEG_CODE[nb1]|0x80):SEG_CODE[nb1]; (nb2>=0x7f)? temp_buff[0] = (SEG_CODE[nb2]|0x80):SEG_CODE[nb2]; fzh_WriteSram( 0x40,START_SRAM,temp_buff,3,fzh_light_grade); //命令1 命令2 數據 數據長度 命令三 //打開顯示 11、16}void fzh_DEC_Number(uint16_t nb,uint8_t dip ){ uint8_t number_2=0; uint8_t number_1=0; uint8_t number_0=0; //65536 999 0.99 9.99 if(nb >999){ nb = 999; } (dip>=2)? (number_2 = (nb/100%10)|0x80):(number_2 = (nb/100%10)); (dip==1)? (number_1 = (nb/100%10)|0x80):(number_1 = (nb/100%10)); number_0 = nb%10; fzh_desplay(number_2,number_1,number_0);}void fzh_SetLightGrade(uint8_t grade,uint8_t onff){ if(grade>7)grade=7; fzh_light_grade = 0; if(onff!=0){ fzh_light_grade = FZH_CMD_ON|grade; }else { fzh_light_grade = FZH_CMD_FF; }}void fzh_Init(void){ myI2C_init(); fzh_SetLightGrade(USAER_CMD_CYCLE_11_16,USAER_CMD_SHOW_ON);}頭文件--------------------------------------------------------------------------------#ifndef __FZHXXX_H#define __FZHXXX_H#define cmdData //010000#include "sys.h"enum GRID{ grid1=0xc0, grid2, grid3, grid4, grid5, grid6, grid7, grid8, grid9, grid10, grid11, grid12, grid13, grid14, grid15, grid16};#define START_SRAM grid5#define FZH_CMD_ON 0x88 //打開數碼管#define FZH_CMD_FF 0x80 //關閉數碼管#define USAER_CMD_CYCLE_1_16 0#define USAER_CMD_CYCLE_2_16 1#define USAER_CMD_CYCLE_4_16 2#define USAER_CMD_CYCLE_10_16 3#define USAER_CMD_CYCLE_11_16 4#define USAER_CMD_CYCLE_12_16 5#define USAER_CMD_CYCLE_13_16 6#define USAER_CMD_CYCLE_14_16 7#define USAER_CMD_SHOW_ON 1#define USAER_CMD_SHOW_OFF 0#define SEG_NUMBER(mode,y) if(mode) (y|0x80) else y //未調用接口 int8_t fzh_WriteSram(uint8_t cmd1,uint8_t cmd2,uint8_t *str,uint8_t len,uint8_t cmd3 );int8_t fzh_cmdWrite(uint8_t cmd);int8_t fzh_cmdWriteDat(uint8_t cmd,uint8_t dat);/*************************************************************************************************函數名 :void fzh_desplay( uint8_t nb2,uint8_t nb1, uint8_t nb0 )*函數功能描述 :數據數據顯示*函數參數 : nb2 nb1 nb0 顯示的文字支持 0-F 支持拓展,對數據高位置1可顯示小數點*函數返回值 :無*作者 :SY*函數創建日期 :2021-10-07************************************************************************************************/void fzh_desplay( uint8_t nb2,uint8_t nb1, uint8_t nb0 );/*************************************************************************************************函數名 :void fzh_DEC_Number(uint16_t nb,uint8_t dip )*函數功能描述 :十進制數據顯示*函數參數 : nb 顯示的數值 dip 放大的倍數,支持0、1、2*函數返回值 :無*作者 :SY*函數創建日期 :20211007************************************************************************************************/void fzh_DEC_Number(uint16_t nb,uint8_t dip );/*************************************************************************************************函數名 :void fzh_SetLightGrade(uint8_t grade,uint8_t onff)*函數功能描述 :亮度設置*函數參數 :grade:亮度等級 支持7個等級 參考宏定義USAER_CMD_CYCLE_ onff 0:關閉顯示 其它:顯示*函數返回值 :無*作者 :SY*函數創建日期 :20211007************************************************************************************************/void fzh_SetLightGrade(uint8_t grade,uint8_t onff);/*************************************************************************************************函數名 :void fzh_Init(void)*函數功能描述 :數碼管初始化數碼管顯示驅動 并設為等亮度 默認顯示*函數參數 :無*函數返回值 :無*作者 :SY*函數創建日期 :20211007************************************************************************************************/void fzh_Init(void);#endif
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121771.html
摘要:單片機在一片集成電路芯片上集成微處理器存儲器接口電路,從而構成了單芯片微型計算機,即單片機。沒搞懂專欄咋弄的,慢慢摸索吧,本人純新手,讀書人的事沒啥要臉不要臉的,有問題隨便指出,隨便噴,歡迎來指點 2021-9-25 自己手繪的一張圖,算是簡單的介紹吧? 對照實圖看一下 ? ? ? ?...
摘要:當小于時,由供電讀數據工作時序單字節寫入上升沿置高電平,下降沿置低電平。當總線控制器把數據線從高電平拉到低電平時,讀時序開始,數據線必須至少保持然后總線被釋放見圖。因此,總線控制器在讀時序開始后必須停止把腳驅動為低電平以讀取腳狀態。 目錄 一、前言 二、總體的設計思路 (一)使用器材 (二...
摘要:現在,單片機的名稱不再是特指公司推出的系列單片機,而是對兼容英特爾指令系統的單片機的統稱。單片機主要品牌及其產品英特爾,等艾特梅爾,,等飛利浦華邦達拉斯西門子等公司的許多產品宏晶系列系列系列等。 ...
摘要:所以我必須基于自己現在的情況走出一條適合自己情況的成長路線。下位機上位機的思想下位機上位機這就是我自己探索出來的技術成長路線。對和嵌入式的朋友感興趣的朋友可以試一下我這條學習路線 ...
閱讀 1714·2021-11-22 15:33
閱讀 2085·2021-10-08 10:04
閱讀 3542·2021-08-27 13:12
閱讀 3418·2019-08-30 13:06
閱讀 1466·2019-08-29 16:43
閱讀 1390·2019-08-29 16:40
閱讀 785·2019-08-29 16:15
閱讀 2745·2019-08-29 14:13