wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区
標題:
STC32G12K128屠龍刀+FT24C256A+MAX7219
[打印本頁]
作者:
wuzhengmin
時間:
2025-11-11 21:43
標題:
STC32G12K128屠龍刀+FT24C256A+MAX7219
最近開始折騰STC32G12K128
買了塊屠龍刀回來,手頭有IIC的存儲芯片FT24C256A
今天我們目的是使用STC的USB-CDC功能,在存儲芯片上寫入8個數值后讀取出來,在數碼管上顯示,同時
要打印到PC機的串口(不用普通串口,用STC-USB-CDC串口)
先看器件:
作者:
wuzhengmin
時間:
2025-11-11 21:47
先看主程序:
//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用戶文件頭說明信息
// 文件名稱: main.c
// 文件描述:
// 文件版本: V1.0
// 修改記錄:
// 1. (2025-11-06) 創建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>
#include "config.h" //默認已包含stdio.h、intrins.h等頭文件
//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用戶頭文件包含
#include "i2c.h"
#include "MAX7219.h"
// 8位Max7219數碼管模塊顯示, CLK = P6^4;CS = P6^5; DIN = P6^6;
//選擇I2C數據口: SCL(P2.5), SDA(P2.4),IIC分頻系數n=60
//<<AICUBE_USER_INCLUDE_END>>
//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用戶全局變量定義、用戶宏定義以及函數聲明
void PlaySMG(u8 tmp_1[8]);
char code LEDcode[]=
{0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00 /*0,1,2,3,4,5,6,7,8,9,全滅*/
,0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff}; /*A,B,C,D,E,F,P,U,全亮*/
char code table[]={
0x7e, //0
0x18, //1
0x37, //2
0x3d, //3
0x59, //4
0x6d, //5
0x6f, //6
0x38, //7
0x7f, //8
0x7d, //9
0x7b, //A
0x4F, //b
0x66, //C
0x1F, //d
0x67, //E
0x63, //F
}; //共陰
//<<AICUBE_USER_GLOBAL_DEFINE_END>>
////////////////////////////////////////
// 項目主函數
// 入口參數: 無
// 函數返回: 無
////////////////////////////////////////
void main(void)
{
//<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
// 在此添加用戶主函數初始化代碼
u8 i=0;
u8 tmp[8];
//<<AICUBE_USER_MAIN_INITIAL_END>>
SYS_Init();
//<<AICUBE_USER_MAIN_CODE_BEGIN>>
// 在此添加主函數中運行一次的用戶代碼
Initial(); //MAX7219初始化
P40 = 0; //三極管引腳輸出低電平
P60 = 0; //輸出低電平 //這2顆燈亮了
P61 = 0; //輸出低電平 //說明這段程序是執行了
delay_ms(2000);//經STC論壇版主erci***指導“print_usb并非阻
//塞函數,所以在打開串口前可能已經打印完成了。 所以延時應放在打印前,或者在循環里
//每隔1s反復打印這樣每次打開串口都能看到!
// printf_usb( " A 首先從24C02讀取8個數\xfd: \r\n");
// printf_usb( " B 把從24C02讀取8個數\xfd加1后寫入24C02:\r\n");
// printf_usb( " C 把從24C02讀取8個數\xfd減1后寫入24C02:\r\n");
// printf_usb( " D 把24C02地址0x0000的8個數\xfd清零: \r\n");
//printf_usb( " 發字符給printf_usb,引發bUsbInBusy檢測 \r\n");
//可以先printf再while(bUsbInBusy == 1);,但是這樣依然看不到第一條printf的
//while(bUsbInBusy==1) //cdc串口發數據之前可以判斷一下當前的usb狀態,等他空閑了再發,
//實測這樣一點問題沒有,但是我們這里不行啊
//{
printf_usb( " A 首先從24C256讀取8個數: \r\n");
printf_usb( " B 把從24C256讀取8個數加1后寫入24C256:\r\n");
printf_usb( " C 把從24C256讀取8個數減1后寫入24C256:\r\n");
printf_usb( " D 把24C256地址0x0000k開始的8個數清零: \r\n");
//};
IIC_Read_NGByte(0x00,0x08,tmp,8); // 從地址 0x0008 開始,讀取8個字節,存入tmp[8]中
for( i=0;i<8;i++ )
{
printf_usb( "%u\t ",tmp[i] );
} //為什么串口助手看不到以上打印結果?
//可能是USB查詢方式,只有在回答查詢的時候才輸出?
PlaySMG(tmp); //數碼管打印8個字節
//<<AICUBE_USER_MAIN_CODE_END>>
while (1)
{
// USBLIB_OUT_Done(); //查詢方式處理USB接收的數據
//<<AICUBE_USER_MAIN_LOOP_BEGIN>>
// 在此添加主函數中用戶主循環代碼
if( bUsbOutReady )
{
//USB_SendData(UsbOutBuffer,OutNumber);
switch( UsbOutBuffer[0] )
{
case 'A': //
//printf("從24C02讀出8個數\xfd據: \r\n");
printf("從24C256讀出8個數據: \r\n");
//-----------------------讀取數據-----------------------
IIC_Read_NGByte(0x00,0x08,tmp,8); // 從地址 0x0008 開始,讀取8個字節,存入tmp[8]中
for( i=0;i<8;i++ )
{
printf( "%u\t",tmp[i] );
/* 以十進制打印
"%u\t" 是格式化字符串,其中:%u 是一個格式控制符,用于指定輸出一個無符號整數。
\t 是一個轉義字符,表示輸出一個水平制表符。dat[i] 是要輸出的數據,它應該是一個無符號整數類型的數組元素。
%u格式控制符用于將數字轉換為無符號整數格式。無符號整數是指不帶符號的整數,即只能表示零和正數的整數類型
*/
}
printf( "讀取結束\r\n");
PlaySMG(tmp); //數碼管打印8個字節
delay_ms(200);
break;
case 'B':
printf( " B 把從24C256讀取8個數加1后寫入24C02:\r\n");
//-----------------------寫入修改后的數據-----------------------
IIC_Read_NGByte(0x00,0x08,tmp,8); // 從地址 0x0008 開始,讀取8個字節,存入tmp[8]中
for( i=0;i<8;i++ )
{
tmp[i] = (tmp[i] +1);
}
IIC_Write_NByte(0x00,0x08,tmp,8); //從地址 0x0008 開始,讀取8個字節,都加1后,原位置寫回去
delay_ms(200);
printf("加1后存儲完成再從24C256讀出8個數據: \r\n");
IIC_Read_NGByte(0x00,0x08,tmp,8); // 從地址 0x0008 開始,讀取8個字節,存入tmp[8]中
for( i=0;i<8;i++ )
{
printf( "%u\t",tmp[i] );
}
PlaySMG(tmp); //數碼管打印8個字節
delay_ms(200);
printf("請比較差別,證實加1寫入成功\r\n");
break;
case 'C':
printf( " C 把從24C256讀取8個數減1后寫入24C256:\r\n");
IIC_Read_NGByte(0x00,0x08,tmp,8); // 從地址 0x0008 開始,讀取8個字節,存入tmp[8]中
for( i=0;i<8;i++ )
{
tmp[i] = (tmp[i] -1);
}
IIC_Write_NByte(0x00,0x08,tmp,8); //從地址 0x0008 開始,讀取8個字節,都減1后,原位置寫回去
delay_ms(200);
printf("減1后存儲完成再從24C256讀出8個數據: \r\n");
IIC_Read_NGByte(0x00,0x08,tmp,8); // 從地址 0x0008 開始,讀取8個字節,存入tmp[8]中
for( i=0;i<8;i++ )
{
printf( "%u\t",tmp[i] );
}
delay_ms(200);
printf("請再次比較差別,證實減1寫入成功\r\n");
PlaySMG(tmp); //數碼管打印8個字節
break;
case 'D':
printf( " D 把24C256地址0x0000開始的8個數清零::\r\n");
for( i=0;i<8;i++ )
{
tmp[i] = 0x00;
}
IIC_Write_NByte(0x00,0x08,tmp,8); //從地址 0x0008 開始,數組成員都變0后,原位置寫回去
delay_ms(200);
printf( " D 24C256地址0x0000開始的8個數已經變成::\r\n");
IIC_Read_NGByte(0x00,0x08,tmp,8); // 從地址 0x0008 開始,讀取8個字節,存入tmp[8]中
for( i=0;i<8;i++ )
{
printf( "%u\t",tmp[i] );
}
delay_ms(200);
printf("請再次比較差別,證實清零成功\r\n");
PlaySMG(tmp); //數碼管打印8個字節
break;
default:
break;
}
usb_OUT_done();
}
//<<AICUBE_USER_MAIN_LOOP_END>>
}
}
////////////////////////////////////////
// 系統初始化函數
// 入口參數: 無
// 函數返回: 無
////////////////////////////////////////
void SYS_Init(void)
{
EnableAccessXFR(); //使能訪問擴展XFR
AccessCodeFastest(); //設置最快速度訪問程序代碼
AccessIXramFastest(); //設置最快速度訪問內部XDATA
IAP_SetTimeBase(); //設置IAP等待參數,產生1us時基
//<<AICUBE_USER_PREINITIAL_CODE_BEGIN>>
// 在此添加用戶預初始化代碼
//<<AICUBE_USER_PREINITIAL_CODE_END>>
P0M0 = 0x00; P0M1 = 0x00; //初始化P0口為準雙向口模式
P1M0 = 0x00; P1M1 = 0x00; //初始化P1口為準雙向口模式
P2M0 = 0x00; P2M1 = 0x00; //初始化P2口為準雙向口模式
P3M0 = 0x00; P3M1 = 0x00; //初始化P3口為準雙向口模式
P4M0 = 0x00; P4M1 = 0x00; //初始化P4口為準雙向口模式
P5M0 = 0x00; P5M1 = 0x00; //初始化P5口為準雙向口模式
P6M0 = 0x00; P6M1 = 0x00; //初始化P6口為準雙向口模式
P7M0 = 0x00; P7M1 = 0x00; //初始化P7口為準雙向口模式
I2C_Init(); //I2C初始化
delay_ms(1);
USBLIB_Init(); //USB庫初始化
delay_ms(1);
//<<AICUBE_USER_INITIAL_CODE_BEGIN>>
// 在此添加用戶初始化代碼
//<<AICUBE_USER_INITIAL_CODE_END>>
EnableGlobalInt(); //使能全局中斷
USBLIB_WaitConfiged(); //等待USB完成配置
}
////////////////////////////////////////
// 微秒延時函數
// 入口參數: us (設置延時的微秒值)
// 函數返回: 無
////////////////////////////////////////
void delay_us(uint16_t us)
{
do
{
NOP(18); //(MAIN_Fosc + 500000) / 1000000 - 6
} while (--us);
}
////////////////////////////////////////
// 毫秒延時函數
// 入口參數: ms (設置延時的毫秒值)
// 函數返回: 無
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
uint16_t i;
do
{
i = MAIN_Fosc / 6000;
while (--i);
} while (--ms);
}
//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用戶函數實現代碼
////////////////////////////////////////
// MAX7219顯示函數
// 入口參數: tmp_1[8]數組 (要顯示的8個數的數組)
// 函數返回: 無
////////////////////////////////////////
void PlaySMG(u8 tmp_1[8])
{
Write7219(8,tmp_1[0]); //數碼管左邊第1位,如果給15就是熄滅
Write7219(7,tmp_1[1]); //數碼管左邊第2位
Write7219(6,tmp_1[2]); //數碼管左邊第3位
Write7219(5,tmp_1[3]); //數碼管左邊第4位
Write7219(4,tmp_1[4]); //數碼管左邊第5位,如果給15就是熄滅
Write7219(3,tmp_1[5]); //數碼管左邊第6位
Write7219(2,tmp_1[6]); //數碼管左邊第7位
Write7219(1,tmp_1[7]); //數碼管左邊第8位 99--3 100--4 101--5 102--6 103--7 104--8 105--9
//Write7219(1,LEDcode[14]|0x80); //數碼管左邊第8位 106--"-" 107--E 108--H 109--L 91--E 92--H
}
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
復制代碼
作者:
wuzhengmin
時間:
2025-11-11 21:48
接著看IIC.C
//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用戶文件頭說明信息
// 文件名稱: i2c.c
// 文件描述:
// 文件版本: V1.0
// 修改記錄:
// 1. (2025-11-06) 創建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>
#include "config.h"
//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用戶頭文件包含
#include "i2c.h"
//<<AICUBE_USER_INCLUDE_END>>
//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用戶全局變量定義、用戶宏定義以及函數聲明
bit zjyd_ASK; //zjyd_ASK=0 就是ASK zjyd_ASK=1 就是NASK
u8 dat;
//<<AICUBE_USER_GLOBAL_DEFINE_END>>
////////////////////////////////////////
// I2C初始化函數
// 入口參數: 無
// 函數返回: 無
////////////////////////////////////////
void I2C_Init(void)
{
I2C_SwitchP2425(); //選擇I2C數據口: SCL(P2.5), SDA(P2.4)
I2C_MasterMode(); //設置I2C為主機模式
I2C_SetClockDivider(60); //設置I2C為主機模式時鐘
I2C_Enable(); //使能I2C功能
//<<AICUBE_USER_I2C_INITIAL_BEGIN>>
// 在此添加用戶初始化代碼
//<<AICUBE_USER_I2C_INITIAL_END>>
}
////////////////////////////////////////
// 主機模式等待命令完成
// 入口參數: 無
// 函數返回: 無
////////////////////////////////////////
void I2C_MasterWait(void)
{
while (!I2C_CheckMasterFlag()); //等待完成標志
I2C_ClearMasterFlag(); //清除完成標志
I2C_Idle(); //恢復IDLE狀態
}
////////////////////////////////////////
// 主機模式發送起始信號
// 入口參數: 無
// 函數返回: 無
////////////////////////////////////////
void I2C_MasterStart(void)
{
I2C_Start(); //觸發主機模式起始命令
I2C_MasterWait(); //等待命令完成
}
////////////////////////////////////////
// 主機模式發送停止信號
// 入口參數: 無
// 函數返回: 無
////////////////////////////////////////
void I2C_MasterStop(void)
{
I2C_Stop(); //觸發主機模式停止命令
I2C_MasterWait(); //等待命令完成
}
////////////////////////////////////////
// 主機模式發送1字節數據
// 入口參數: dat (待發送的字節數據)
// 函數返回: 0 (接收的應答信號為ACK)
// 1 (接收的應答信號為NAK)
////////////////////////////////////////
BOOL I2C_MasterSendByte(uint8_t dat)
{
I2C_WriteData(dat); //將數據寫入I2C數據寄存器
I2C_SendData(); //觸發主機模式寫數據命令
I2C_MasterWait(); //等待命令完成
I2C_RecvACK(); //觸發主機模式接收應答命令
I2C_MasterWait(); //等待命令完成
return I2C_MasterReadACK(); //讀取并返回應答信號
}
////////////////////////////////////////
// 主機模式接收1字節數據
// 入口參數: ack (待發送的應答信號)
// 函數返回: (接收的字節數據)
////////////////////////////////////////
uint8_t I2C_MasterReadByte(BOOL ack)
{
uint8_t dat;
I2C_RecvData(); //觸發主機模式讀數據命令
I2C_MasterWait(); //等待命令完成
dat = I2C_ReadData(); //讀取接收的數據
if (!ack)
I2C_MasterSetACK(); //將ACK數據寫入寄存器
else
I2C_MasterSetNAK(); //將NAK數據寫入寄存器
I2C_SendACK(); //觸發主機模式發送應答命令
I2C_MasterWait(); //等待命令完成
return dat; //返回接收的數據
}
//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用戶函數實現代碼
//存儲地址超過2K的,要用16位地址
////////////////////////////////////////
// 主機模式向IIC_24c256寫入1字節數據
// 入口參數: addrH(地址高8位),addrL(地址低8位),dat (待發送的1字節數據)
// 函數返回:無
//
////////////////////////////////////////
void IIC_Write1Gbyte(u8 addrH,u8 addrL, u8 dat) //寫入一個字節
{
I2C_MasterStart(); // START
zjyd_ASK = I2C_MasterSendByte(SLAW); //發送從設備地址+寫
if(!zjyd_ASK) // 收到ASK就發送AT24C256地址高8位
{
zjyd_ASK = I2C_MasterSendByte(addrH); //寫存儲地址高8位
if(!zjyd_ASK) // 收到ASK就發送AT24C256地址低8位
{
zjyd_ASK = I2C_MasterSendByte(addrL); //寫存儲地址低8位
if(!zjyd_ASK) // 收到ASK就向AT24C256寫1字節數據
{
zjyd_ASK = I2C_MasterSendByte(dat); //寫1字節數據
}
if(zjyd_ASK) //應答是NASK,就中止
return;
I2C_MasterStop(); //發送停止命令
}
}
}
////////////////////////////////////////
// 主機模式讀取1字節數據
// 入口參數: addrH(地址高8位),addrL(地址低8位),ack (待發送的應答信號)
// 函數返回: (接收的字節數據)
////////////////////////////////////////
void I2C_MasterRead1GByte(u8 addrH,u8 addrL)
{
I2C_MasterStart(); // START
zjyd_ASK = I2C_MasterSendByte(SLAW); //發送從設備地址+寫
if(!zjyd_ASK) // 收到ASK就發送AT24C256地址高8位
{
zjyd_ASK = I2C_MasterSendByte(addrH); //寫存儲地址高8位
if(!zjyd_ASK) // 收到ASK就發送AT24C256地址低8位
{
zjyd_ASK = I2C_MasterSendByte(addrL); //寫存儲地址低8位
if(zjyd_ASK) //應答是NASK,就中止
return ;
else
{
I2C_MasterStart(); // START
zjyd_ASK = I2C_MasterSendByte(SLAW); //發送從設備地址+讀
if(!zjyd_ASK) // 收到ASK就向AT24C256讀1字節數據
{
dat = I2C_MasterReadByte(zjyd_ASK); //就讀1個字節,入口參數是非應答
I2C_MasterStop(); //發送停止命令
}
}
}
}
}
//--------------------------------功能函數--------------------------------
// (器件24C256的應答ASK或者NASK)
//存儲地址超過2K的,要用16位地址,連續讀取iic幾個字節的函數
void IIC_Write_NByte(u8 addrH,u8 addrL, u8 *p, u8 number) /* WordAddress,1st Data Address,2nd Data
Address,Byte lenth 在芯片addrH+addrL開始的地址里寫入p的內容,長度是number個字節,F0=0,right, F0=1,error */
{ //
// 1. 發送起始信號+設備地址(寫模式)
I2C_MasterStart(); // START
zjyd_ASK = I2C_MasterSendByte(SLAW); //主機模式發送1字節數據,函數返回: 接收的應答信號0為ACK),1為NAK
// 設備地址 + 寫命令(最后一位是0)
if(!zjyd_ASK) // 2. 收到ASK就發送AT24C02地址
{
zjyd_ASK = I2C_MasterSendByte(addrH); //寫存儲器地址高8位
if(!zjyd_ASK) // 收到ASK就發送AT24C256地址低8位
{
zjyd_ASK = I2C_MasterSendByte(addrL); //寫存儲地址低8位
if(zjyd_ASK) //應答是NASK,就中止
return;
else
{
do //開始連續寫number個字節
{
zjyd_ASK = I2C_MasterSendByte(*p); //寫入數組p的內容去IIC
p++; //指針+1,主機模式寫1字節數據,函數返回0為ACK, 1為NAK
if(zjyd_ASK) break; //出錯了就終止
}
while(--number);
I2C_MasterStop(); //發送停止命令,結束IIC通信
}
}
}
}
//連續讀取iic幾個字節的函數
void IIC_Read_NGByte(u8 addrH, u8 addrL, u8 *p, u8 number) //WordAddress,1st Data Address,2nd Data Address,Byte lenth
{
// 1. 發送起始信號+設備地址(寫模式)
I2C_MasterStart(); // START
zjyd_ASK = I2C_MasterSendByte(SLAW); //主機模式發送1字節,函數返回: 0(應答信號為ACK), 1(接收的應答信號為NAK)
// 設備地址 + 寫命令(最后一位是0)
if(!zjyd_ASK) // 2. 收到ASK就發送AT24C256高位地址
zjyd_ASK = I2C_MasterSendByte(addrH); //發送存儲芯片AT24C256高位地址
if(!zjyd_ASK) // 3. 還能收到ASK就發送低位地址
zjyd_ASK = I2C_MasterSendByte(addrL); //發送存儲芯片AT24C256低位地址
if(!zjyd_ASK) // 3. 還能收到ASK就發送起始信號
{
I2C_MasterStart(); // START
zjyd_ASK = I2C_MasterSendByte(SLAR); //發送設備地址+讀命令
}
if(!zjyd_ASK) //4. 還能收到ASK連續讀取number字節(最后1字節發送NACK)
{
do
{
*p = I2C_MasterReadByte(zjyd_ASK); //主機模式接收1字節數據,入口參數: ack (待發送的應答信號)函數返回: (接收的字節數據)
//讀取1字節數據函數
p++; //指針+1
if(number!= 1)
zjyd_ASK=0; //發送ASK函數
else
zjyd_ASK=1; //發送NASK函數
}while(--number);
I2C_MasterStop();
}
}
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
復制代碼
作者:
wuzhengmin
時間:
2025-11-11 21:50
接著是IIC.h
//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用戶文件頭說明信息
// 文件名稱: i2c.h
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>
#ifndef __I2C_H__
#define __I2C_H__
//<<AICUBE_USER_DEFINE_BEGIN>>
// 在此添加用戶宏定義
#define SLAW 0xA0 // IIC地址+寫 1010 0000 0xA0 (A2=0,A1=0,A0=0)
#define SLAR 0xA1 // IIC地址+讀 1010 0001 0xA1 (A2=0,A1=0,A0=0)
//<<AICUBE_USER_DEFINE_END>>
void I2C_Init(void);
void I2C_MasterWait(void);
void I2C_MasterStart(void);
void I2C_MasterStop(void);
BOOL I2C_MasterSendByte(uint8_t dat);
uint8_t I2C_MasterReadByte(BOOL ack);
//<<AICUBE_USER_EXTERNAL_DECLARE_BEGIN>>
// 在此添加用戶外部函數和外部變量聲明
extern u8 dat;
void IIC_Write1Gbyte(u8 addrH,u8 addrL, u8 dat); //寫入一個字節
void I2C_MasterRead1GByte(u8 addrH,u8 addrL);
void IIC_Write_NByte(u8 addrH,u8 addrL, u8 *p, u8 number); /* WordAddress,1st Data Address,2nd Data
Address,Byte lenth 在芯片addrH+addrL開始的地址里寫入p的內容,長度是number個字節,F0=0,right, F0=1,error */
void IIC_Read_NGByte(u8 addrH, u8 addrL, u8 *p, u8 number); //WordAddress,1st Data Address,2nd Data Address,Byte lenth
//<<AICUBE_USER_EXTERNAL_DECLARE_END>>
#endif
復制代碼
作者:
wuzhengmin
時間:
2025-11-11 21:51
再看MAX7219.c
#include "MAX7219.h"
#include "config.h"
//地址、數據發送子程序
void Write7219(unsigned char address,unsigned char dat)
{
unsigned char i;
CS=0; //拉低片選線,選中器件
//發送地址
for (i=0;i<8;i++) //移位循環8次
{
CLK=0; //清零時鐘總線
DIN=(bit)(address&0x80); //每次取高字節
address<<=1; //左移一位
CLK=1; //時鐘上升沿,發送地址
}
//發送數據
for (i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(dat&0x80);
dat<<=1;
CLK=1; //時鐘上升沿,發送數據
}
CS=1; //發送結束,上升沿鎖存數據
}
//MAX7219初始化,設置MAX7219內部的控制寄存器
void Initial(void)
{
Write7219(SHUT_DOWN,0x01); //開啟正常工作模式(0xX1)
Write7219(DISPLAY_TEST,0x00); //選擇工作模式(0xX0)
Write7219(DECODE_MODE,0xff); //選用全譯碼模式
Write7219(SCAN_LIMIT,0x07); //8只LED全用
Write7219(INTENSITY,0x02); //設置初始亮度,共有16級可選擇,用于設置SMG的顯示亮度,從0x00~0x0F
}
復制代碼
作者:
wuzhengmin
時間:
2025-11-11 21:52
接著是MAX7219.h
#ifndef __MAX7219_H__
#define __MAX7219_H__
#include <STC32G.h>
sbit CLK = P6^4; //MAX7219串行時鐘CLK
sbit CS = P6^5; //MAX7219片選CS
sbit DIN = P6^6; //MAX7219串行數據DIN
#define DECODE_MODE 0x09 //譯碼控制寄存器
#define INTENSITY 0x0A //亮度控制寄存器,有16級可選擇,用于設置LED的顯示亮度,從0xX0~0xXF
#define SCAN_LIMIT 0x0B //掃描界限寄存器
#define SHUT_DOWN 0x0C //關斷模式寄存器
#define DISPLAY_TEST 0x0F //測試控制寄存器
void Write7219(unsigned char address,unsigned char dat);
void Initial(void);
#endif
復制代碼
作者:
wuzhengmin
時間:
2025-11-11 21:56
器件很簡單:
STC32G12K128 屠龍刀1塊,MAX7219 8位數碼管1個 AT24C256 IIC 存儲芯片一塊
編譯環境 :256
μVision V5.14.2
CKeil_v5\C251BIN C251.exe V5.60.0.0
A251.exe V4.69.13.0
L251.exe V4.66.93.0LIB251.exe OH251.exe S251.DLL DCORE51.DLL V4.30.1.0V1.47.0.0
V3.129.0.0
V2.81.6.0
作者:
wuzhengmin
時間:
2025-11-11 22:00
最后我把程序打包,壓縮發上來:
STC32G IIC256 MAX7219.zip
2025-11-11 22:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
426.48 KB, 下載次數: 0, 下載積分: 黑幣 -5
作者:
wuzhengmin
時間:
2025-11-11 22:01
歡迎大家多交流
作者:
joyb
時間:
2025-11-13 08:27
c251如何安裝?
歡迎光臨 (http://m.izizhuan.cn/bbs/)
Powered by Discuz! X3.1
国产一区二区久久精品
|
国产精品手机在线观看
|
久久精品国产视频
|
欧美性生交xxxxx久久久
|
粉嫩欧美一区二区三区高清影视
|
国产精品对白
|
av中文资源在线资源免费观看
|
www狠狠操
|
午夜视频福利在线
|
一级片中文字幕
|
成年人在线观看av
|
欧美 日韩 国产 激情
|
欧美精品人人做人人爱视频
|
欧美性在线观看
|
亚洲男人天堂九九视频
|
欧美日韩在线播放三区四区
|
国产精品亲子伦对白
|
日本成人在线一区
|
国产精品传媒精东影业在线
|
www.久久爱.com
|
男人天堂亚洲天堂
|
免费在线观看一级毛片
|
成色在线视频
|
免费看污片的软件
|
亚洲精品国产一区二区在线
|
国产毛片久久久久
|
国产又大又黄又粗
|
我家有个日本女人
|
黑人巨大精品欧美
|
一区二区三区国产好的精华液
|
国产 国语对白 露脸
|
蜜桃狠狠色伊人亚洲综合网站
|
欧美专区日韩视频
|
欧美日韩成人网
|
在线观看国产精品淫
|
日韩欧美亚洲国产另类
|
欧美在线综合视频
|
调教+趴+乳夹+国产+精品
|
中文字幕 久热精品 视频在线
|
国产a视频精品免费观看
|
日本欧美一区二区在线观看
|
伊人激情综合
|
午夜欧美理论片
|
日本不卡电影
|
成人网18免费网站
|
免费福利视频一区
|
www.成人网
|
在线观看欧美
|
国产日本久久
|
日韩一区精品
|
欧美日韩激情电影
|
亚洲精品久久久久久久久久久久久久
|
欧美精品一级片
|
成人高潮免费视频
|
国产高潮流白浆
|
国产这里有精品
|
国产高潮国产高潮久久久91
|
人妻一区二区视频
|
久久午夜福利电影
|
成人性视频免费看
|
亚洲综合久久av一区二区三区
|
草草影院第一页
|
一级黄色片大全
|
www在线观看免费视频
|
亚洲精品乱码久久久久久不卡
|
国产艳妇疯狂做爰视频
|
青青草视频成人
|
中国美女黄色一级片
|
国产不卡在线观看视频
|
国产成人免费在线观看视频
|
精品亚洲乱码一区二区
|
久久精品视频免费在线观看
|
久久伊人成人网
|
免费在线不卡视频
|
日韩欧美一级大片
|
日本午夜一区二区
|
韩国一区二区三区
|
99精品久久久久久
|
中文幕一区二区三区久久蜜桃
|
国产精品国产自产拍高清av王其
|
亚洲美女区一区
|
欧美性生活大片免费观看网址
|
欧美伊人久久久久久午夜久久久久
|
91久久精品国产91性色tv
|
国产福利视频一区二区
|
国产噜噜噜噜噜久久久久久久久
|
在线一区视频观看
|
久久99成人
|
国产探花一区二区
|
午夜日韩视频
|
开心九九激情九九欧美日韩精美视频电影
|
国产毛片精品视频
|
国产视频视频一区
|
亚洲国产精品麻豆
|
91精品国产一区二区三区香蕉
|
日韩精品亚洲精品
|
欧美理论片在线观看
|
国产成人精品久久二区二区91
|
舔着乳尖日韩一区
|
色偷偷一区二区三区
|
欧美一区二区三区视频在线
|
亚洲精品资源美女情侣酒店
|
精品中文字幕视频
|
成人黄在线观看
|
天堂资源在线亚洲视频
|
青青视频在线播放
|
波多野结衣先锋影音
|
欧美日韩偷拍视频
|
91在线公开视频
|
欧美高清xxxx性
|
人成在线视频
|
黑人极品ⅴideos精品欧美棵
|
中文成人激情娱乐网
|
精品国产午夜
|
日本视频在线一区
|
中文字幕不卡在线
|
欧美猛男gaygay网站
|
爽爽爽爽爽爽爽成人免费观看
|
日韩美女在线播放
|
日韩欧美亚洲精品
|
在线观看的毛片
|
亚洲欧美另类日本
|
99精品人妻无码专区在线视频区
|
国产l精品国产亚洲区在线观看
|
97香蕉久久
|
中文字幕在线视频久
|
亚州av一区
|
男人操女人的视频在线观看欧美
|
国产性色一区二区
|
9191成人精品久久
|
国模视频一区二区三区
|
久久亚裔精品欧美
|
天天干天天操天天做
|
精国产品一区二区三区a片
|
日本免费一区视频
|
欧美艹逼视频
|
日韩一区二区三区免费
|
国产精品二区不卡
|
成人免费高清视频在线观看
|
丰满岳妇乱一区二区三区
|
亚洲图片欧美日产
|
岛国一区二区三区高清视频
|
日韩中文字幕在线视频观看
|
无码少妇一区二区
|
亚洲国产精品一
|
婷婷综合影院
|
欧美一区=区三区
|
一区二区久久
|
樱桃国产成人精品视频
|
精品视频中文字幕
|
亚洲综合小说区
|
男操女免费网站
|
日韩福利片在线观看
|
欧美日韩亚洲色图
|
69亚洲精品久久久蜜桃小说
|
国产精品你懂的在线观看
|
av网站大全在线观看
|
久久亚洲道色
|
国产伦理精品不卡
|
欧美怡红院视频
|
国产精品久久久久av
|
亚洲精品无码久久久久久
|
四虎成人精品永久免费av
|
99高清免费国产自产拍
|
av在线免费播放
|
99国产精品一区二区
|
久久欧美一区二区
|
亚洲免费视频一区二区
|
蜜桃免费一区二区三区
|
亚洲午夜福利在线观看
|
男人的天堂色
|
国产在线高清理伦片a
|
天天综合一区
|
亚洲免费在线观看视频
|
久久夜色精品亚洲噜噜国产mv
|
亚洲精蜜桃久在线
|
永久av免费网站
|
尤物在线观看视频
|
成人短视频app
|
日本欧美在线观看
|
日韩一区二区三区av
|
91久久国产综合久久91精品网站
|
www.桃色.com
|
www.国产视频
|
黄色小视频在线免费观看
|
精品午夜久久
|
亚洲蜜桃精久久久久久久
|
97精品国产aⅴ7777
|
日本www在线播放
|
亚洲天堂中文网
|
日韩美女一级视频
|
sdde在线播放一区二区
|
中文字幕一区日韩精品欧美
|
久久天天躁狠狠躁夜夜躁
|
男人草女人视频
|
欧美男人亚洲天堂
|
欧美精品一区二区三区涩爱蜜
|
亚洲影院天堂中文av色
|
中文字幕亚洲精品在线观看
|
九九久久国产精品
|
成人精品小视频
|
精品国产av一区二区三区
|
韩日视频在线
|
亚洲经典三级
|
欧美美女bb生活片
|
久久涩涩网站
|
欧美黄色一区二区三区
|
黄色一级片视频
|
欧美日韩一二三四
|
五月婷婷激情综合
|
91欧美精品成人综合在线观看
|
完美搭档在线观看
|
高清精品一区二区三区一区
|
欧美男女视频
|
97久久中文字幕
|
国产日韩欧美电影
|
91成人在线播放
|
日本一本在线视频
|
久久精品成人欧美大片免费
|
欧美视频精品
|
亚洲欧洲另类国产综合
|
国产精品激情自拍
|
色婷婷av777
|
999www成人
|
国产一区二区三区网
|
黄网站色欧美视频
|
国产在线播放一区二区
|
国产亚洲欧美精品久久久久久
|
福利资源在线久
|
国产精品www.
|
亚洲第一精品夜夜躁人人爽
|
97超碰国产精品
|
亚洲av无码乱码在线观看性色
|
91福利在线免费
|
99视频精品全部免费在线
|
欧美精品久久久久a
|
亚洲欧美高清在线
|
h在线观看视频免费网站
|
欧美日韩老妇
|
日韩你懂的在线播放
|
日韩精品一区二区三区四
|
亚洲av无码一区二区三区性色
|
在线视频超级
|
欧美激情在线看
|
成人午夜黄色影院
|
国产五月天婷婷
|
欧美r级在线
|
国产精品亚洲人在线观看
|
久久免费视频在线观看
|
国产精品第七页
|
黄页网址在线观看
|
肉丝袜脚交视频一区二区
|
最近2019免费中文字幕视频三
|
久久久久xxxx
|
eeuss影院eeuss最新直达
|
在线看片不卡
|
日韩极品精品视频免费观看
|
看欧美ab黄色大片视频免费
|
xxx欧美老熟
|
久久久久亚洲
|
国产午夜精品免费一区二区三区
|
激情六月婷婷久久
|
久久久免费在线观看
|
少妇久久久久久久久久
|
最新中文在线视频
|
蜜臀久久久久久久
|
555www成人网
|
麻豆亚洲av成人无码久久精品
|
米奇精品一区二区三区
|
久久一区二区视频
|
国产精品久久国产三级国电话系列
|
国产又大又黄又粗
|
户外露出一区二区三区
|
av动漫精品一区二区
|
欧美性色黄大片
|
啊啊啊一区二区
|
黄色a**址
|
99国产精品久久久久久久
|
俺去啦;欧美日韩
|
最新中文字幕av
|
免费在线毛片网站
|
最新国产精品久久精品
|
日韩激情视频
|
日韩一本大道
|
重囗味另类老妇506070
|
日韩亚洲国产中文字幕
|
国产精品国产三级国产专业不
|
在线观看二区
|
国产精品全国免费观看高清
|
亚洲7777
|
久久精品最新免费国产成人
|
欧美视频官网
|
高清在线视频日韩欧美
|
久久久国产精品黄毛片
|
色在线中文字幕
|
日韩欧美国产成人
|
国产成人av影视
|
浪潮av在线
|
不卡的看片网站
|
欧美lavv
|
欧美videos另类
|
99精品福利视频
|
国产精品99久久久久久久久久久久
|
久久久久久久欧美精品
|
69精品小视频
|
亚洲黄色免费观看
|
亚洲日本视频在线
|
欧美性性性性性ⅹxxbbbb
|
国产精品国产三级国产三级人妇
|
欧美一区二区网站
|
国产视频三区四区
|
57pao成人永久免费
|
影音先锋欧美精品
|
亚洲精品一区二三区
|
91精品国产福利在线观看麻豆
|
国产日韩精品在线观看
|
欧美白人猛性xxxxx交69
|
国产v综合v亚洲欧
|
无码人妻丰满熟妇区96
|
av网站无病毒在线
|
欧美一区二区三区在线
|
久久久精品99
|
91亚洲人成网污www
|
亚洲jizzjizz日本少妇
|
日日夜夜网站
|
亚洲国产精品精华液ab
|
狠狠躁狠狠躁视频专区
|
sqte在线播放
|
亚洲一级黄色片
|
精品国精品国产自在久不卡
|
99爱在线观看
|
欧美v亚洲v综合ⅴ国产v
|
日本在线视频免费观看
|
亚洲欧美亚洲
|
人禽交欧美网站免费
|
色网址在线观看
|
欧美在线播放高清精品
|
久草网在线观看
|
91精品久久久久久久蜜月
|
www日本视频
|
毛片av一区二区
|
日韩精品一区二区免费
|
理论片午午伦夜理片在线播放
|
欧美成人video
|
在线观看国产精品入口男同
|
亚洲综合日韩
|
日韩精品一区二区三区四
|
v天堂福利视频在线观看
|
精品一区二区三区四区在线
|
国产精品久久777777换脸
|
青青草国产精品97视觉盛宴
|
美女扒开大腿让男人桶
|
俄罗斯一级**毛片在线播放
|
色七七影院综合
|
777片理伦片在线观看
|
中文字幕的久久
|
我不卡一区二区
|
国产精品久久久乱弄
|
欧美日韩国产一二
|
国产在线观看网站
|
日韩大陆毛片av
|
亚洲第一视频在线
|
99视频精品全部免费在线
|
风韵丰满熟妇啪啪区老熟熟女
|
日韩成人视屏
|
亚洲一区二区少妇
|
一区二区三区四区在线免费视频
|
日韩天堂在线观看
|
国产日韩欧美视频在线观看
|
粉嫩欧美一区二区三区高清影视
|
国产黄色一区二区三区
|
国产精品高潮呻吟久久久久
|
国产精品高清一区二区三区
|
神马久久精品
|
国产视频精品免费播放
|
亚洲第一色网
|
国产精品免费看片
|
中文字幕91视频
|
亚洲精品婷婷
|
亚洲国产精品久久久久爰色欲
|
福利一区二区免费视频
|
国产精品视频播放
|
两个人hd高清在线观看
|
亚洲精品一区在线观看
|
亚洲欧洲国产综合
|
一区二区中文字幕在线
|
成人性生活毛片
|
日韩高清不卡在线
|
色婷婷.com
|
蜜桃a∨噜噜一区二区三区
|
欧美日韩在线精品
|
日韩经典av
|
青青草精品毛片
|
美女的诞生在线观看高清免费完整版中文
|
欧美色图17p
|
亚洲欧美日韩综合国产aⅴ
|
狠狠操精品视频
|
日韩精品导航
|
熟妇熟女乱妇乱女网站
|
欧洲亚洲两性
|