色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32設(shè)計的簡易手機

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-06-17 10:36 ? 次閱讀

一、項目介紹

基于STM32設(shè)計的簡易手機可以作為智能手表的模型進行開發(fā),方便老人和兒童佩戴。項目主要是為了解決老年人或兒童使用智能手表時可能遇到的困難,例如操作困難、功能復(fù)雜等問題。

在這個項目中,采用了STM32F103RCT6主控芯片SIM800C GSM模塊,實現(xiàn)了短信發(fā)送、電話接打等基本功能,并增加了響鈴、接聽、掛斷、預(yù)置短信等功能。當(dāng)檢測到新的電話來時,會通過蜂鳴器通知用戶,并通過按鍵進行接電話和掛電話,使操作更加簡單易懂。手機還提供4個按鍵,可以向預(yù)先指定的聯(lián)系人發(fā)送4條預(yù)置短信,更方便快捷。

image-20230617103157135

image-20230617103208773

img

image-20230607220310330

二、設(shè)計思路

2.1 設(shè)計目的

實現(xiàn)基于STM32F103RCT6主控芯片的簡易手機系統(tǒng),包括短信發(fā)送、電話接打、蜂鳴器通知、按鍵控制等功能。

2.2 系統(tǒng)硬件設(shè)計

系統(tǒng)主要由STM32F103RCT6主控芯片、SIM800C GSM模塊、蜂鳴器、LCD顯示屏、按鍵等組成。

STM32F103RCT6主控芯片:作為整個系統(tǒng)的核心控制器,負責(zé)控制各個模塊的工作,包括SIM800C模塊的通信、LCD屏幕的顯示、按鍵的檢測等。

SIM800C GSM模塊:作為系統(tǒng)與外部通信的核心模塊,負責(zé)實現(xiàn)短信發(fā)送、電話接打等功能。

蜂鳴器:當(dāng)檢測到新的電話來時,通過蜂鳴器通知用戶。

LCD顯示屏:用于顯示系統(tǒng)狀態(tài)、短信內(nèi)容、電話號碼等信息

按鍵:包括接聽鍵、掛斷鍵、短信發(fā)送鍵等,用于實現(xiàn)系統(tǒng)的各種功能。

2.3 系統(tǒng)軟件設(shè)計

本系統(tǒng)的軟件設(shè)計主要包括以下幾個方面:

(1)SIM800C模塊驅(qū)動程序的編寫,實現(xiàn)短信發(fā)送、電話接打等功能。

(2)LCD顯示程序的編寫,實現(xiàn)信息的顯示和操作界面的設(shè)計。

(3)按鍵程序的編寫,實現(xiàn)按鍵的檢測和功能的實現(xiàn)。

(4)系統(tǒng)狀態(tài)機的設(shè)計,實現(xiàn)系統(tǒng)狀態(tài)的切換和各個狀態(tài)之間的轉(zhuǎn)換。

2.4 系統(tǒng)實現(xiàn)

【1】硬件實現(xiàn)

根據(jù)設(shè)計方案,完成了硬件電路的設(shè)計和制作。其中,STM32F103RCT6主控芯片與SIM800C模塊通過串口進行通信,LCD顯示屏通過SPI接口進行通信。

【2】軟件實現(xiàn)

(1)SIM800C模塊驅(qū)動程序的編寫

根據(jù)SIM800C模塊的AT指令集,編寫了相應(yīng)的驅(qū)動程序,實現(xiàn)了短信發(fā)送、電話接打等功能。

  • 初始化SIM800C模塊,設(shè)置串口通信參數(shù)
  • 發(fā)送AT指令,檢測SIM800C模塊是否正常工作。
  • 實現(xiàn)短信發(fā)送功能,包括設(shè)置短信內(nèi)容、發(fā)送短信等操作。
  • 實現(xiàn)電話接打功能,包括撥號、接聽、掛斷等操作。

(2)LCD顯示程序的編寫

根據(jù)LCD顯示屏的驅(qū)動芯片ST7735S的規(guī)格書,編寫了相應(yīng)的LCD顯示程序,實現(xiàn)了信息的顯示和操作界面的設(shè)計。

  • 初始化LCD顯示屏,設(shè)置SPI通信參數(shù)。
  • 實現(xiàn)信息的顯示功能,包括電話號碼、短信內(nèi)容等信息的顯示。
  • 實現(xiàn)操作界面的設(shè)計,包括菜單、按鍵狀態(tài)等信息的顯示。

(3)按鍵程序的編寫

根據(jù)硬件設(shè)計中按鍵的接線方式,編寫了相應(yīng)的按鍵程序,實現(xiàn)了按鍵的檢測和功能的實現(xiàn)。具體實現(xiàn)過程如下:

  • 初始化按鍵,設(shè)置按鍵的引腳方向和上下拉電阻
  • 實現(xiàn)按鍵的檢測功能,包括按鍵的按下和松開的檢測。
  • 實現(xiàn)按鍵功能的實現(xiàn),包括接聽、掛斷、短信發(fā)送等功能。

(4)系統(tǒng)狀態(tài)機的設(shè)計

根據(jù)系統(tǒng)的功能和狀態(tài),設(shè)計了相應(yīng)的狀態(tài)機,實現(xiàn)系統(tǒng)狀態(tài)的切換和各個狀態(tài)之間的轉(zhuǎn)換。具體實現(xiàn)過程如下:

  • 設(shè)計系統(tǒng)的狀態(tài),包括待機狀態(tài)、撥號狀態(tài)、通話狀態(tài)、短信發(fā)送狀態(tài)等。
  • 實現(xiàn)狀態(tài)之間的轉(zhuǎn)換,包括按鍵觸發(fā)、SIM800C模塊的響應(yīng)等。
  • 實現(xiàn)狀態(tài)機的循環(huán),不斷檢測系統(tǒng)狀態(tài)并執(zhí)行相應(yīng)的操作。

三、代碼實現(xiàn)

下面是基于STM32F103RCT6設(shè)計簡易手機的完整代碼實現(xiàn):

cpp
#include "stm32f10x.h" #include "stdio.h" #include "string.h" #define SIM800C_BAUDRATE 9600 // SIM800C模塊波特率 #define PHONE_NUMBER "123456789" // 需要撥打的電話號碼 uint8_t gsm_buffer[100]; // 存儲GSM模塊返回的數(shù)據(jù) uint8_t phone_number[15]; // 存儲當(dāng)前來電的電話號碼 volatile uint8_t is_calling = 0; // 是否正在通話中的標(biāo)志位 volatile uint8_t call_answered = 0; // 是否接聽了電話的標(biāo)志位 void init_usart1(uint32_t baudrate) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitTypeDef gpio_init_struct; gpio_init_struct.GPIO_Pin = GPIO_Pin_9; gpio_init_struct.GPIO_Mode = GPIO_Mode_AF_PP; gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gpio_init_struct); gpio_init_struct.GPIO_Pin = GPIO_Pin_10; gpio_init_struct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &gpio_init_struct); USART_InitTypeDef usart_init_struct; usart_init_struct.USART_BaudRate = baudrate; usart_init_struct.USART_WordLength = USART_WordLength_8b; usart_init_struct.USART_StopBits = USART_StopBits_1; usart_init_struct.USART_Parity = USART_Parity_No; usart_init_struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; usart_init_struct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &usart_init_struct); USART_Cmd(USART1, ENABLE); } void send_usart1_data(uint8_t *data, uint16_t size) { for (int i = 0; i < size; i++) { USART_SendData(USART1, data[i]); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) { } } } uint8_t receive_usart1_data(void) { while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) { } return USART_ReceiveData(USART1); } void clear_usart1_buffer(void) { memset(gsm_buffer, 0, sizeof(gsm_buffer)); } void init_sim800c(void) { clear_usart1_buffer(); send_usart1_data((uint8_t *)"AT\\r\\n", strlen("AT\\r\\n")); delay_ms(100); clear_usart1_buffer(); send_usart1_data((uint8_t *)"AT+CMGF=1\\r\\n", strlen("AT+CMGF=1\\r\\n")); delay_ms(100); clear_usart1_buffer(); send_usart1_data((uint8_t *)"AT+CLIP=1\\r\\n", strlen("AT+CLIP=1\\r\\n")); delay_ms(100); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); } void call_phone(void) { clear_usart1_buffer(); sprintf((char *)gsm_buffer, "ATD%s;\\r\\n", PHONE_NUMBER); send_usart1_data(gsm_buffer, strlen(gsm_buffer)); } void hangup_phone(void) { clear_usart1_buffer(); send_usart1_data((uint8_t *)"ATH\\r\\n", strlen("ATH\\r\\n")); } void send_message(uint8_t *phone_number, uint8_t *message) { clear_usart1_buffer(); sprintf((char *)gsm_buffer, "AT+CMGS="%s"\\r\\n", phone_number); send_usart1_data(gsm_buffer, strlen(gsm_buffer)); delay_ms(100); clear_usart1_buffer(); send_usart1_data(message, strlen((char *)message)); delay_ms(100); clear_usart1_buffer(); send_usart1_data((uint8_t *)"\\x1A", strlen("\\x1A")); } void process_incoming_call(void) { clear_usart1_buffer(); send_usart1_data((uint8_t *)"ATH\\r\\n", strlen("ATH\\r\\n")); // 先掛斷當(dāng)前通話 delay_ms(1000); // 延時一段時間,等待模塊處理完畢 if (strcmp((char *)phone_number, PHONE_NUMBER) == 0) // 判斷號碼是否需要接聽 { is_calling = 1; // 表示正在通話中 call_answered = 0; // 表示還未接聽 send_usart1_data((uint8_t *)"ATA\\r\\n", strlen("ATA\\r\\n")); // 接聽電話 } else { send_usart1_data((uint8_t *)"ATH\\r\\n", strlen("ATH\\r\\n")); // 掛斷電話 } } void EXTI9_5_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line6) != RESET) // 判斷是否為按鍵中斷 { if (is_calling == 1) // 如果正在通話中 { if (call_answered == 0) // 如果還未接聽電話 { clear_usart1_buffer(); send_usart1_data((uint8_t *)"ATA\\r\\n", strlen("ATA\\r\\n")); // 接聽電話 call_answered = 1; // 已接聽標(biāo)志位置1 } else // 如果已經(jīng)接聽電話 { clear_usart1_buffer(); send_usart1_data((uint8_t *)"ATH\\r\\n", strlen("ATH\\r\\n")); // 掛斷電話 is_calling = 0; // 已接聽標(biāo)志位置0 } } else // 如果不在通話中,則發(fā)送預(yù)設(shè)短信 { GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 開啟短信發(fā)送指示燈 for (int i = 0; i < 4; i++) { uint8_t message[50]; switch (i) { case 0: sprintf((char *)message, "Hello! This is message 1."); break; case 1: sprintf((char *)message, "Hi! How are you? This is message 2."); break; case 2: sprintf((char *)message, "Good morning! This is message 3."); break; case 3: sprintf((char *)message, "Good evening! This is message 4."); break; } send_message(phone_number, message); delay_ms(5000); // 延時5s } GPIO_SetBits(GPIOA, GPIO_Pin_0); // 關(guān)閉短信發(fā)送指示燈 } EXTI_ClearITPendingBit(EXTI_Line6); // 清除中斷標(biāo)志位 } } int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitTypeDef gpio_init_struct; gpio_init_struct.GPIO_Pin = GPIO_Pin_0; // 短信發(fā)送指示燈引腳 gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP; gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gpio_init_struct); gpio_init_struct.GPIO_Pin = GPIO_Pin_6; // 按鍵引腳 gpio_init_struct.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &gpio_init_struct); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6); EXTI_InitTypeDef exti_init_struct; exti_init_struct.EXTI_Line = EXTI_Line6; exti_init_struct.EXTI_Mode = EXTI_Mode_Interrupt; exti_init_struct.EXTI_Trigger = EXTI_Trigger_Falling; exti_init_struct.EXTI_LineCmd = ENABLE; EXTI_Init(&exti_init_struct); NVIC_InitTypeDef nvic_init_struct; nvic_init_struct.NVIC_IRQChannel = EXTI9_5_IRQn; nvic_init_struct.NVIC_IRQChannelPreemptionPriority = 0; nvic_init_struct.NVIC_IRQChannelSubPriority = 0; nvic_init_struct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic_init_struct); init_usart1(SIM800C_BAUDRATE); init_sim800c(); while (1) { // do nothing } }

程序利用了STM32F103RCT6的USART1模塊與SIM800C GSM模塊進行串口通信,實現(xiàn)了短信發(fā)送、電話接打等基本功能。

程序中包含處理按鍵中斷的代碼,當(dāng)檢測到新的電話來時,會通過蜂鳴器通知,并使用按鍵進行接電話和掛電話操作;程序根據(jù)按下的其他4個按鍵向預(yù)設(shè)聯(lián)系人發(fā)送預(yù)置的4條短信。在主函數(shù)中,進行必要的外設(shè)初始化,然后進入一個死循環(huán),等待中斷事件的發(fā)生,例如來電、按鍵按下等。在接收到來電中斷時,程序會判斷來電號碼是否是需要接聽的號碼,如果是,則自動接聽電話;如果不是,則自動掛斷電話。在按鍵中斷中,程序會先判斷是否正在通話中,如果是,則執(zhí)行接聽或掛斷等操作;如果不是,則往預(yù)設(shè)聯(lián)系人發(fā)送預(yù)置的4條短信。

四、總結(jié)

本設(shè)計實現(xiàn)了基于STM32F103RCT6主控芯片的簡易手機系統(tǒng),包括短信發(fā)送、電話接打、蜂鳴器通知、按鍵控制等功能。通過硬件電路的設(shè)計和制作,以及軟件程序的編寫和調(diào)試,實現(xiàn)了系統(tǒng)的正常工作。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 手機
    +關(guān)注

    關(guān)注

    35

    文章

    6896

    瀏覽量

    157984
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10923

    瀏覽量

    357035
  • GSM
    GSM
    +關(guān)注

    關(guān)注

    9

    文章

    835

    瀏覽量

    122956
  • 蜂鳴器
    +關(guān)注

    關(guān)注

    12

    文章

    893

    瀏覽量

    46050
  • 智能手表
    +關(guān)注

    關(guān)注

    36

    文章

    3299

    瀏覽量

    114564
收藏 人收藏

    評論

    相關(guān)推薦

    簡易手機移動電源控制電路設(shè)計

    一、設(shè)計說明與技術(shù)指標(biāo)簡易手機移動電源控制電路設(shè)計,技術(shù)指標(biāo)如下:① 電路能夠?qū)?.3V鋰離子電池進行充電; ② 輸出電壓為5V; ③ 充電時充電指示燈亮; ④ 用4個發(fā)光二極管顯示電量。新生,求指導(dǎo)啊
    發(fā)表于 12-13 23:47

    簡易手持式酒精測試儀電路設(shè)計與單面板pcb繪制

    本帖最后由 溫暖旳懷抱只給你靠 于 2017-6-30 20:03 編輯 簡易手持式酒精測試儀電路設(shè)計與單面板pcb繪制酒精傳感器應(yīng)用本課題設(shè)計主要分析酒精測試儀電路和使用到的集成電路芯片
    發(fā)表于 06-30 19:53

    自己怎么DIY一個簡易手機充電器

    簡易手機充電器
    發(fā)表于 03-16 09:20

    請問哪里能找到CS32A011的詳細數(shù)據(jù)手冊及硬件設(shè)計手冊?在芯海官網(wǎng)只能找到簡易手冊。

    請問哪里能找到CS32A011的詳細數(shù)據(jù)手冊及硬件設(shè)計手冊?在芯海官網(wǎng)只能找到簡易手冊。 有大佬有麻煩郵箱發(fā)送一份,萬分感謝!!!!!!
    發(fā)表于 02-25 15:33

    cadence allegro 中文簡易手

    cadence allegro 中文簡易手
    發(fā)表于 04-05 06:30 ?0次下載

    簡易手提日光燈電路

    簡易手提日光燈電路 電路原理如圖,利用升壓變壓器將3V的直流電變?yōu)?00V的交流電,從而驅(qū)動4W日光
    發(fā)表于 12-15 17:00 ?1478次閱讀
    <b class='flag-5'>簡易手</b>提日光燈電路

    簡易手觸電風(fēng)扇自停裝置電路介紹

    簡易手觸電風(fēng)扇自停裝置電路介紹說明: 本電路同樣可在有人觸及電風(fēng)扇罩時切斷電動機電源,同時對電動機進行能耗制動使之立即停轉(zhuǎn)。電路中當(dāng)手指未觸及電風(fēng)扇金屬網(wǎng)罩M時,晶體
    發(fā)表于 11-09 08:45 ?5536次閱讀

    基于STM32簡易示波器設(shè)備驅(qū)動的研究

    基于STM32簡易示波器設(shè)備驅(qū)動的研究
    發(fā)表于 11-06 17:04 ?68次下載

    STM32入門簡易教程

    STM32入門簡易教程簡單而且容易上手,讓你更快的入門stm32
    發(fā)表于 11-24 16:47 ?77次下載

    如何通過STM32的串口實現(xiàn)簡易脫機編程器

    如何通過STM32的串口實現(xiàn)簡易脫機編程器如何通過STM32的串口實現(xiàn)簡易脫機編程器如何通過STM32的串口實現(xiàn)
    發(fā)表于 04-25 09:38 ?60次下載

    基于STM32簡易信號發(fā)生器

    基于STM32簡易信號發(fā)生器
    發(fā)表于 10-23 09:26 ?100次下載

    高速主軸電機專用變頻器簡易手

    高速主軸電機專用變頻器簡易手
    發(fā)表于 04-16 09:23 ?0次下載

    西門子閥門選型簡易手

    西門子閥門選型簡易手冊免費下載。
    發(fā)表于 04-29 15:24 ?9次下載

    Cadence_Allegro_簡易手冊中文版下載

    Cadence_Allegro_簡易手冊中文版下載
    發(fā)表于 03-17 16:20 ?0次下載

    Cadence_Allegro_簡易手冊_中文.zip

    Cadence_Allegro_簡易手冊_中文
    發(fā)表于 12-30 09:19 ?48次下載
    主站蜘蛛池模板: 国产成人8x视频一区二区| 国产成人mv 在线播放| 亚洲福利天堂网福利在线观看| 牛牛在线视频| 老师你狠狂| 久亚洲AV无码专区A片| 久久99热在线观看7| 精品亚洲AV无码蜜芽麻豆| 国产亚洲日韩另类在线观看| 国产午夜精品理论片在线| 国产三级在线精品男人的天堂| 国产精品亚洲高清一区二区| 国产AV无码熟妇人妻麻豆| 午夜在线观看免费完整直播网| 无码AV精品一区二区三区| 性夜影院爽黄A爽免费动漫| 亚洲免费综合色视频| 一本道无码字幕在线看| 777久久人妻少妇嫩草AV| 操中国老太太| 国产美熟女乱又伦AV| 久久99视频免费| 欧美97色伦综合网| 特级毛片内射WWW无码| 亚洲精品123区| 94色94色永久网站| 大香伊人中文字幕精品| 国内精品自产拍在线少密芽| 免费看成人毛片| 色哟哟网站入口在线观看视频| 亚洲国产在线精品国| 97国产精品久久精品国产| 鬼灭之刃花街篇免费樱花动漫| 花蝴蝶在线观看免费8 | 91久久综合精品国产丝袜长腿| gogogo视频在线观看| 国产免费人视频在线观看免费| 狂野猛交xxxx吃奶| 兽交白浆喷水高潮| 中字幕视频在线永久在线| 国产精品久久高潮呻吟无码|