找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5102|回复: 9
打印 上一主题 下一主题
收起左侧

基于stm32的教室照明智能控制系统源程序与Proteus仿真

  [复制链接]
跳转到指定楼层
楼主
ID:511094 发表于 2021-3-19 22:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
没人,灯灭 1-3人,亮3个灯 4-6人亮6个灯 大于6人,全亮 液晶显示屏,显示人数

教室照明智能控制系统仿真原理图如下(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 口做输入口时,不用设置输出频率
  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. }
复制代码

所有资料51hei提供下载:
proteus仿真图.rar (106.25 KB, 下载次数: 232)
STM32程序.7z (186.2 KB, 下载次数: 235)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏9 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:896812 发表于 2021-6-7 10:49 | 只看该作者
不错不错,完整的,赞!用Keil5编译成功了

51hei.png (46.86 KB, 下载次数: 49)

51hei.png

51hei.png (41.57 KB, 下载次数: 40)

51hei.png
回复

使用道具 举报

板凳
ID:931684 发表于 2021-6-8 16:10 来自手机 | 只看该作者
完整的?有没有运行出错?
回复

使用道具 举报

地板
ID:931684 发表于 2021-6-8 16:33 | 只看该作者
为什么我编译失败?是我的Keil设置有问题吧,都是这些头文件找不到

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
好多这个
回复

使用道具 举报

5#
ID:336378 发表于 2021-6-16 09:49 | 只看该作者
楼上需要安装 KEIL   MDK  软件
回复

使用道具 举报

6#
ID:933572 发表于 2021-6-19 23:11 | 只看该作者
工程在哪个文件夹里面 大家能告知一下吗?
回复

使用道具 举报

7#
ID:928738 发表于 2021-6-20 12:29 | 只看该作者
请问proteus用的哪个版本?是不是有版本限制?
回复

使用道具 举报

8#
ID:387687 发表于 2021-12-7 17:35 | 只看该作者

请问proteus用的哪个版本?
回复

使用道具 举报

9#
ID:1029323 发表于 2022-5-31 16:59 | 只看该作者
无心法师III 发表于 2021-6-8 16:10
完整的?有没有运行出错?

我的仿真软件运行不正常
回复

使用道具 举报

10#
ID:1027059 发表于 2022-6-4 09:37 | 只看该作者
xjj850205 发表于 2021-12-7 17:35
请问proteus用的哪个版本?

一般都是高版本兼容性更好一点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表