配置矩陣鍵盤輸入
//PA0~PA3為推挽式輸出
//PA4~PA7為上拉輸入
//PA9->RXD PA10->TXD
void KEY44_Init(void)
{
//PA0~PA3為推挽式輸出
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PA4~PA7為上拉輸入
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
unsigned char key44_Scan(void)
{
H_1 = 0;
H_2 = 1;
H_3 = 1;
H_4 = 1;
if(L_1 == 0)
{
delay_ms(10);
if(L_1 == 0)
{
while(!L_1);
return 1;
}
}
if(L_2 == 0)
{
delay_ms(10);
if(L_2 == 0)
{
while(!L_2);
return 2;
}
}
if(L_3 == 0)
{
delay_ms(10);
if(L_3 == 0)
{
while(!L_3);
return 3;
}
}
if(L_4 == 0)
{
delay_ms(10);
if(L_4 == 0)
{
while(!L_4);
return 4;
}
}
H_1 = 1;
H_2 = 0;
H_3 = 1;
H_4 = 1;
if(L_1 == 0)
{
delay_ms(10);
if(L_1 == 0)
{
while(!L_1);
return 5;
}
}
if(L_2 == 0)
{
delay_ms(10);
if(L_2 == 0)
{
while(!L_2);
return 6;
}
}
if(L_3 == 0)
{
delay_ms(10);
if(L_3 == 0)
{
while(!L_3);
return 7;
}
}
if(L_4 == 0)
{
delay_ms(10);
if(L_4 == 0)
{
while(!L_4);
return 8;
}
}
H_1 = 1;
H_2 = 1;
H_3 = 0;
H_4 = 1;
if(L_1 == 0)
{
delay_ms(10);
if(L_1 == 0)
{
while(!L_1);
return 9;
}
}
if(L_2 == 0)
{
delay_ms(10);
if(L_2 == 0)
{
while(!L_2);
return 10;
}
}
if(L_3 == 0)
{
delay_ms(10);
if(L_3 == 0)
{
while(!L_3);
return 11;
}
}
if(L_4 == 0)
{
delay_ms(10);
if(L_4 == 0)
{
while(!L_4);
return 12;
}
}
H_1 = 1;
H_2 = 1;
H_3 = 1;
H_4 = 0;
if(L_1 == 0)
{
delay_ms(10);
if(L_1 == 0)
{
while(!L_1);
return 13;
}
}
if(L_2 == 0)
{
delay_ms(10);
if(L_2 == 0)
{
while(!L_2);
return 14;
}
}
if(L_3 == 0)
{
delay_ms(10);
if(L_3 == 0)
{
while(!L_3);
return 15;
}
}
if(L_4 == 0)
{
delay_ms(10);
if(L_4 == 0)
{
while(!L_4);
return 16;
}
}
return 0;
}
配置USART3
void USART3_Init(u32 bound)
{
// PB10 & PB11
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
//開啟GPIOB 和 復用功能時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
//開啟USART3的時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
//PB10 ->Tx 配置為復用推挽式輸出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//PB11 ->Rx 配置為浮空輸入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//配置串口
USART_InitStructure.USART_BaudRate = bound;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART3, &USART_InitStructure);
USART_Cmd(USART3,ENABLE);
USART_GetFlagStatus(USART3,USART_FLAG_TC);//防止第一個字符被吞
}
主函數
u8 key_num = 0;
u8 i = 0;
int main(void)
{
KEY44_Init();
delay_init();
USART3_Init(115200);
while(1)
{
key_num = key44_Scan();
if(key_num != 0)
{
USART_SendData(USART3,key_num);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC) == 0);
}
}
}
上一篇:STM32學習筆記一一USART
下一篇:STM32+按鍵調控PWM輸出+串口輸出占空比
推薦閱讀
史海拾趣
在發展過程中,Bel Fuse注重與合作伙伴建立長期穩定的合作關系。公司積極尋求與全球知名企業的合作機會,通過技術合作、資源共享等方式,共同推動電子行業的發展。這些合作伙伴關系的建立不僅為公司帶來了更多的業務機會,還提升了公司的技術水平和市場競爭力。
隨著全球電子市場的日益繁榮,ARBOR公司開始實施國際化戰略。公司在多個國家和地區設立了分支機構,積極與當地企業合作,拓展市場份額。通過不斷調整和優化產品線,ARBOR公司的產品逐漸在全球范圍內贏得了良好的口碑。國際化戰略的實施不僅提升了公司的知名度,也為公司的持續發展奠定了堅實基礎。
ASSMANN WSW components公司深知品質是企業生存和發展的關鍵。因此,公司始終堅持品質至上的原則,從原材料采購到生產流程,再到產品出廠,每一個環節都嚴格把控。公司還建立了完善的質量檢測體系,確保每一件產品都符合最高標準。這種對品質的執著追求使得ASSMANN WSW的產品在市場上贏得了良好的口碑。
維峰電子(WCON)于2002年在廣東成立,由創始人李文化帶領的團隊共同創立。創業初期,公司面臨著資金短缺、技術落后和市場競爭激烈等多重挑戰。然而,團隊憑借著對電子連接器行業的深刻理解和堅定信念,不斷研發新產品,優化生產工藝,逐漸在市場中站穩腳跟。他們通過不懈努力,成功開發出多款具有競爭力的電子連接器產品,為公司后續的發展奠定了堅實基礎。
隨著環保意識的提高,ECE公司積極響應環保號召,致力于推廣綠色環保理念。公司采用環保材料和生產工藝,減少廢棄物排放和能源消耗。同時,ECE公司還積極參與環保公益活動,宣傳環保知識,提高公眾的環保意識。這些努力使ECE公司成為電子行業中綠色環保的倡導者和實踐者。
黃花905c,908哪個比較好,比較耐用? 我現在的30W外熱烙鐵,焊接還是比較好用的,可是有時想拆EPSON的電路板就焊不化了,把烙鐵放在上面很長時間,錫化了,剛一拿走,就又凝固了; 所以,想選個可以調溫的,就看上了 黃花905c,908哪個比較好,比 ...… 查看全部問答∨ |
|
我現在在用工控機做實時控制,從外界數據采集卡采集到的數據怎樣才能更快地讀到系統內存中呢?最好在100us之內。 Windows定時器的定時精度只有55ms,多媒體的也只有7ms,如果用QueryPerformanceFrequency()和QueryPerformanceCounter(),他們一直 ...… 查看全部問答∨ |
|
使用固件庫自帶的例程libraryFWLibexamplesI2CM24C08_EEPROMi2c_ee.c文件編寫24LC02代碼:系統時鐘:72M, PCK1時鐘:36M, I2C時鐘:100K I2C_EE_Init(); I2C_EE_BufferWrite(Tx1_Buffer, ...… 查看全部問答∨ |
至于是不是BUG,現在沒必要爭論.但是至少需要ST修改文檔了.ADC與DMA合起來用有隱患!這問題,至少ST的文檔中對ADC和DMA聯合使用部分介紹的不足.在壓力測試中,DMA有可能出現所謂"錯位"問題,例如將ad0,ad1,ad2規則轉換時,可能發生丟失一次ad數 ...… 查看全部問答∨ |
本帖最后由 dontium 于 2015-1-23 13:42 編輯 大家好,我想輸入一個模擬信號,當電壓升高,輸出的PWM占空比就變大。但是程序進不了中斷,請幫忙看看這段程序,謝謝。程序是改別人的,剛開始學,見笑了 #include "msp430x14x.h" #define ucha ...… 查看全部問答∨ |
仿真器:seed-xds560plus 開發板:基于tms320vc5402 (經測試無損壞) 操作系統:Windows xp sp3 開發環境:ccs3.3 配置過程: ...… 查看全部問答∨ |
工作地點在鎮江丹陽,這是一家民營企業,老板是很nice的人,待遇不錯,提供住宿。 1. 電子類相關專業,本科及以上學歷2. 有5年以上電子產品開發設計經驗, 3年以上的項目管理經驗.3. 有LED燈模組、開關電源或車載逆變器等相關產品設計經驗者優佳;4 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 西門子收購 DownStream Technologies,擴展 PCB 設計到制造流程
- Melexis推出32×24紅外陣列傳感器芯片MLX90642,樹立熱成像感應技術的新標桿
- 意法半導體發布STM32MP23高性價比MPU, 并延長對OpenSTLinux版本的支持期限
- OPPO 推出搭載超聲波指紋的新一代影像旗艦Find X8 Ultra
- 英飛凌推出用于AURIX?、TRAVEO?和PSOC?的Drive Core, 加速并簡化軟件開發
- 三星球形投影機器人專利公示,變革家庭娛樂
- TDK推出第一款嵌入式柵極驅動器- 加強EV熱系統效率
- LAB后輪轉向排行榜:從高端到普及,后輪轉向也要白菜化了
- 子彈都不怕的動力電池,為何碰撞還起火?
- 從18650到21700再到大圓柱電池 新電池帶來什么好處?