標(biāo)題: 基于stm32的教室照明智能控制系統(tǒng)源程序與Proteus仿真 [打印本頁]

作者: lufeiboy    時間: 2021-3-19 22:17
標(biāo)題: 基于stm32的教室照明智能控制系統(tǒng)源程序與Proteus仿真
沒人,燈滅 1-3人,亮3個燈 4-6人亮6個燈 大于6人,全亮 液晶顯示屏,顯示人數(shù)

教室照明智能控制系統(tǒng)仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "bsp-lcd1602.h"
  3. #include "delay.h"
  4. #include "sys.h"
  5. #include "adc.h"

  6. char people_ADD = 0;

  7. void led( void )
  8. {
  9.         GPIO_InitTypeDef GPIO_InitStructure;         
  10.         
  11.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  12.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  14.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  15.         GPIO_Init(GPIOC, &GPIO_InitStructure);        
  16.         
  17. }

  18. void led_one( void )
  19. {
  20.         GPIO_SetBits(GPIOC,GPIO_Pin_0);
  21.         GPIO_ResetBits(GPIOC,GPIO_Pin_1);
  22.         GPIO_SetBits(GPIOC,GPIO_Pin_2);
  23.         GPIO_SetBits(GPIOC,GPIO_Pin_3);
  24.         GPIO_ResetBits(GPIOC,GPIO_Pin_4);
  25.         GPIO_SetBits(GPIOC,GPIO_Pin_5);
  26.         GPIO_SetBits(GPIOC,GPIO_Pin_6);
  27.         GPIO_ResetBits(GPIOC,GPIO_Pin_7);
  28.         GPIO_SetBits(GPIOC,GPIO_Pin_8);
  29.         GPIO_SetBits(GPIOC,GPIO_Pin_9);
  30.         GPIO_SetBits(GPIOC,GPIO_Pin_10);
  31.         GPIO_SetBits(GPIOC,GPIO_Pin_11);

  32. }

  33. void led_two(void)
  34. {
  35.         GPIO_SetBits(GPIOC,GPIO_Pin_0);
  36.         GPIO_ResetBits(GPIOC,GPIO_Pin_1);
  37.         GPIO_ResetBits(GPIOC,GPIO_Pin_2);
  38.         GPIO_SetBits(GPIOC,GPIO_Pin_3);
  39.         GPIO_ResetBits(GPIOC,GPIO_Pin_4);
  40.         GPIO_ResetBits(GPIOC,GPIO_Pin_5);
  41.         GPIO_SetBits(GPIOC,GPIO_Pin_6);
  42.         GPIO_ResetBits(GPIOC,GPIO_Pin_7);
  43.         GPIO_ResetBits(GPIOC,GPIO_Pin_8);
  44.         GPIO_SetBits(GPIOC,GPIO_Pin_9);
  45.         GPIO_SetBits(GPIOC,GPIO_Pin_10);
  46.         GPIO_SetBits(GPIOC,GPIO_Pin_11);
  47. }

  48. void led_three(void)
  49. {
  50.         GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  51.         GPIO_ResetBits(GPIOC,GPIO_Pin_1);
  52.         GPIO_ResetBits(GPIOC,GPIO_Pin_2);
  53.         GPIO_ResetBits(GPIOC,GPIO_Pin_3);
  54.         GPIO_ResetBits(GPIOC,GPIO_Pin_4);
  55.         GPIO_ResetBits(GPIOC,GPIO_Pin_5);
  56.         GPIO_ResetBits(GPIOC,GPIO_Pin_6);
  57.         GPIO_ResetBits(GPIOC,GPIO_Pin_7);
  58.         GPIO_ResetBits(GPIOC,GPIO_Pin_8);
  59.         GPIO_ResetBits(GPIOC,GPIO_Pin_9);
  60.         GPIO_ResetBits(GPIOC,GPIO_Pin_10);
  61.         GPIO_ResetBits(GPIOC,GPIO_Pin_11);
  62. }

  63. void led_Down(void)
  64. {
  65.         GPIO_SetBits(GPIOC,GPIO_Pin_0);
  66.         GPIO_SetBits(GPIOC,GPIO_Pin_1);
  67.         GPIO_SetBits(GPIOC,GPIO_Pin_2);
  68.         GPIO_SetBits(GPIOC,GPIO_Pin_3);
  69.         GPIO_SetBits(GPIOC,GPIO_Pin_4);
  70.         GPIO_SetBits(GPIOC,GPIO_Pin_5);
  71.         GPIO_SetBits(GPIOC,GPIO_Pin_6);
  72.         GPIO_SetBits(GPIOC,GPIO_Pin_7);
  73.         GPIO_SetBits(GPIOC,GPIO_Pin_8);
  74.         GPIO_SetBits(GPIOC,GPIO_Pin_9);
  75.         GPIO_SetBits(GPIOC,GPIO_Pin_10);
  76.         GPIO_SetBits(GPIOC,GPIO_Pin_11);
  77.         
  78. }



  79. void Key_GPIO_Config(void)
  80. {
  81.         GPIO_InitTypeDef GPIO_InitStructure;
  82.         
  83.         /*開啟按鍵端口(PA)的時鐘*/
  84.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
  85.         
  86.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  87.         
  88.         // IO 口做輸入口時,不用設(shè)置輸出頻率
  89.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  90.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  91.         
  92.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  93. }


  94. void KEY_Scan( void )
  95. {
  96.         if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1 )  
  97.         {         
  98.                 /*等待按鍵釋放 */
  99.                 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1);
  100.                 people_ADD++;
  101.                 if( people_ADD > 50 )
  102.                 {
  103.                         people_ADD = 50;
  104.                 }
  105.         }
  106.         
  107.         if( ADC_GetConversionValue(ADC1) > 1000 )
  108.         {
  109.                 while( (ADC_GetConversionValue(ADC1) > 1000 ));
  110.                 people_ADD--;
  111.                 if( people_ADD <= 0 )
  112.                 {
  113.                         people_ADD = 0;
  114.                 }
  115.         }
  116. }



  117. int main(void)
  118. {
  119.         Key_GPIO_Config();
  120.         ADC1_GPIO_Config();
  121.         ADC_Config();
  122.         LCD1602_Init();
  123.         led();
  124.         LCD1602_ShowStr(0,0,"     Light     ",15);
  125.         LCD1602_ShowStr(0,1,"People:",7);
  126.         led_Down();
  127.         
  128.         while(1)
  129.         {
  130.                 LCD1602_WriteCmd( 0x80+0x40+8);
  131.                 LCD1602_WriteDat( people_ADD/10+'0' );
  132.                 LCD1602_WriteDat( people_ADD%10+'0' );
  133.                 KEY_Scan();
  134.                
  135.                
  136.                 if(( people_ADD > 0 )&&( people_ADD <= 3 ))
  137.                 {
  138.                         led_one();
  139.                 }
  140.                 else
  141.                 {
  142.                         if(( people_ADD > 3 )&&( people_ADD <= 6 ))
  143.                         {
  144.                                 led_two();
  145.                         }
  146.                         else
  147.                         {
  148.                                 if( people_ADD > 6 )
  149.                                 {
  150.                                         led_three();
  151.                                 }
  152.                                 else
  153.                                 {
  154.                                         led_Down();
  155.                                 }
  156.                         }
  157.                 }
  158.         }
  159. }
復(fù)制代碼

所有資料51hei提供下載:
proteus仿真圖.rar (106.25 KB, 下載次數(shù): 240)
STM32程序.7z (186.2 KB, 下載次數(shù): 244)



作者: 小紅愛打嗝    時間: 2021-6-7 10:49
不錯不錯,完整的,贊!用Keil5編譯成功了

51hei.png (46.86 KB, 下載次數(shù): 63)

51hei.png

51hei.png (41.57 KB, 下載次數(shù): 59)

51hei.png

作者: 無心法師III    時間: 2021-6-8 16:10
完整的?有沒有運行出錯?
作者: 無心法師III    時間: 2021-6-8 16:33
為什么我編譯失敗?是我的Keil設(shè)置有問題吧,都是這些頭文件找不到

Build target 'Target 1'
compiling s1.c...
s1.c(1): warning C318: can't open file 'stm32f10x.h'
s1.c(2): warning C318: can't open file 'bsp-lcd1602.h'
s1.c(3): warning C318: can't open file 'delay.h'
s1.c(4): warning C318: can't open file 'sys.h'
s1.c(5): warning C318: can't open file 'adc.h'
S1.C(11): error C202: 'GPIO_InitTypeDef': undefined identifier
S1.C(11): error C141: syntax error near 'GPIO_InitStructure'
S1.C(13): error C202: 'RCC_APB2Periph_GPIOC': undefined identifier
S1.C(17): error C202: 'GPIOC': undefined identifier
S1.C(23): error C202: 'GPIOC': undefined identifier
S1.C(24): error C202: 'GPIOC': undefined identifier
S1.C(25): error C202: 'GPIOC': undefined identifier
S1.C(26): error C202: 'GPIOC': undefined identifier
S1.C(27): error C202: 'GPIOC': undefined identifier
S1.C(28): error C202: 'GPIOC': undefined identifier
S1.C(29): error C202: 'GPIOC': undefined identifier
S1.C(30): error C202: 'GPIOC': undefined identifier
S1.C(31): error C202: 'GPIOC': undefined identifier
S1.C(32): error C202: 'GPIOC': undefined identifier
S1.C(33): error C202: 'GPIOC': undefined identifier
S1.C(34): error C202: 'GPIOC': undefined identifier
S1.C(40): error C202: 'GPIOC': undefined identifier
S1.C(41): error C202: 'GPIOC': undefined identifier
S1.C(42): error C202: 'GPIOC': undefined identifier
S1.C(43): error C202: 'GPIOC': undefined identifier
S1.C(44): error C202: 'GPIOC': undefined identifier
S1.C(45): error C202: 'GPIOC': undefined identifier
S1.C(46): error C202: 'GPIOC': undefined identifier
S1.C(47): error C202: 'GPIOC': undefined identifier
S1.C(48): error C202: 'GPIOC': undefined identifier
S1.C(49): error C202: 'GPIOC': undefined identifier
S1.C(50): error C202: 'GPIOC': undefined identifier
S1.C(51): error C202: 'GPIOC': undefined identifier
S1.C(56): error C202: 'GPIOC': undefined identifier
S1.C(57): error C202: 'GPIOC': undefined identifier
S1.C(58): error C202: 'GPIOC': undefined identifier
S1.C(59): error C202: 'GPIOC': undefined identifier
S1.C(60): error C202: 'GPIOC': undefined identifier
S1.C(61): error C202: 'GPIOC': undefined identifier
S1.C(62): error C202: 'GPIOC': undefined identifier
S1.C(63): error C202: 'GPIOC': undefined identifier
S1.C(64): error C202: 'GPIOC': undefined identifier
S1.C(65): error C202: 'GPIOC': undefined identifier
S1.C(66): error C202: 'GPIOC': undefined identifier
S1.C(67): error C202: 'GPIOC': undefined identifier
S1.C(72): error C202: 'GPIOC': undefined identifier
S1.C(73): error C202: 'GPIOC': undefined identifier
S1.C(74): error C202: 'GPIOC': undefined identifier
S1.C(75): error C202: 'GPIOC': undefined identifier
S1.C(76): error C202: 'GPIOC': undefined identifier
S1.C(77): error C202: 'GPIOC': undefined identifier
S1.C(78): error C202: 'GPIOC': undefined identifier
S1.C(79): error C202: 'GPIOC': undefined identifier
S1.C(80): error C202: 'GPIOC': undefined identifier
S1.C(81): error C202: 'GPIOC': undefined identifier
S1.C(82): error C202: 'GPIOC': undefined identifier
S1.C(83): error C202: 'GPIOC': undefined identifier
S1.C(91): error C202: 'GPIO_InitTypeDef': undefined identifier
S1.C(91): error C141: syntax error near 'GPIO_InitStructure'
S1.C(94): error C202: 'RCC_APB2Periph_GPIOA': undefined identifier
S1.C(102): error C202: 'GPIOA': undefined identifier
S1.C(108): error C202: 'GPIOA': undefined identifier
S1.C(111): error C202: 'GPIOA': undefined identifier
S1.C(119): error C202: 'ADC1': undefined identifier
S1.C(121): error C202: 'ADC1': undefined identifier
好多這個
作者: cba_cba    時間: 2021-6-16 09:49
樓上需要安裝 KEIL   MDK  軟件
作者: 阿惠    時間: 2021-6-19 23:11
工程在哪個文件夾里面 大家能告知一下嗎?
作者: yayayunyun    時間: 2021-6-20 12:29
請問proteus用的哪個版本?是不是有版本限制?
作者: xjj850205    時間: 2021-12-7 17:35

請問proteus用的哪個版本?
作者: 361690548    時間: 2022-5-31 16:59
無心法師III 發(fā)表于 2021-6-8 16:10
完整的?有沒有運行出錯?

我的仿真軟件運行不正常
作者: helianthus    時間: 2022-6-4 09:37
xjj850205 發(fā)表于 2021-12-7 17:35
請問proteus用的哪個版本?

一般都是高版本兼容性更好一點




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1