找回密码
 立即注册

QQ登录

只需一步,快速开始

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

矩阵键盘stm32f103c8t6源码

[复制链接]
跳转到指定楼层
楼主
ID:304220 发表于 2018-4-12 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
矩阵键盘stm32f103c8t6单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "GPIO.h"
  3. #include "delay.h"
  4. #include "sys.h"
  5. #include "oled.h"
  6. #include "key.h"
  7. #include "adc.h"

  8. extern int number;

  9. void Delay(uint32_t nCount)
  10. {
  11.   for(; nCount != 0; nCount--);
  12. }


  13. //=============================================================================
  14. //文件名称:main
  15. //功能概要:主函数
  16. //参数说明:无
  17. //函数返回:int
  18. //=============================================================================
  19. int main(void)
  20. {
  21.         unsigned int i,ADC_Value,times,temp1,time1,temp2,time2;
  22.         
  23.         GPIO_Configuration();
  24.         delay_init();
  25.         InitKey();               
  26.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  27.         ADC1_Init();
  28.         OLED_Init();                        //初始化OLED  
  29.         OLED_Clear()          ;
  30.     while (1)
  31.         {
  32.                 i=GetNumer();        
  33.                 temp1=i/1000000;//温度1
  34.                 time1=i%1000000/10000;//时间1
  35.                 temp2=i%10000/100;//温度2
  36.                 time2=i%100;//时间2
  37.                 OLED_ShowChar(18,2,'W',16);
  38.                 OLED_ShowChar(36,2,temp1/10+48,16);
  39.                 OLED_ShowChar(48,2,temp1%10+48,16);
  40.                 OLED_ShowChar(70,2,'T',16);
  41.                 OLED_ShowChar(88,2,time1/10+48,16);
  42.                 OLED_ShowChar(100,2,time1%10+48,16);
  43.                
  44.                 OLED_ShowChar(18,4,'W',16);
  45.                 OLED_ShowChar(36,4,temp2/10+48,16);
  46.                 OLED_ShowChar(48,4,temp2%10+48,16);
  47.                 OLED_ShowChar(70,4,'T',16);
  48.                 OLED_ShowChar(88,4,time2/10+48,16);
  49.                 OLED_ShowChar(100,4,time2%10+48,16);

  50.                 ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_239Cycles5 );                                            
  51.                 ADC_SoftwareStartConvCmd(ADC1, ENABLE);               
  52.                 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
  53.                 ADC_Value=ADC_GetConversionValue(ADC1);        
  54.                
  55.                 ADC_Value=ADC_Value*1000/4096;
  56.                
  57.                 OLED_ShowChar(18,6,'W',16);

  58.                 OLED_ShowChar(48,6,ADC_Value/100+48,16);
  59.                 OLED_ShowChar(60,6,ADC_Value%100/10+48,16);
  60.                 OLED_ShowChar(70,6,'.',16);
  61.                 OLED_ShowChar(80,6,ADC_Value%10+48,16);
  62.                

  63.                 if((ADC_Value>(temp1*10-50))&&(ADC_Value<(temp1*50+50))&&(time1!=0))
  64.                 {
  65.                         if(ADC_Value>temp1)
  66.                         {
  67.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_9);//绿灯亮
  68.                                         GPIO_SetBits(GPIOB,GPIO_Pin_7);
  69.                         }
  70.                         else
  71.                         {
  72.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_7);//红灯亮
  73.                                         GPIO_SetBits(GPIOB,GPIO_Pin_9);
  74.                         }
  75.                         //保温计时开始
  76.                         times++;
  77.                         
  78.                         if(times==30)
  79.                         {
  80.                                 if(time1!=0)
  81.                                         number=number-10000;
  82.                                 times=0;        
  83.                         }
  84.                 }
  85.                
  86.                 else if((ADC_Value>(temp2*10-50))&&(ADC_Value<(temp2*50+50))&&(time2!=0))
  87.                 {
  88.                         if(ADC_Value>temp2)
  89.                         {
  90.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_9);//绿灯亮
  91.                                         GPIO_SetBits(GPIOB,GPIO_Pin_7);
  92.                         }
  93.                         else
  94.                         {
  95.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_7);//红灯亮
  96.                                         GPIO_SetBits(GPIOB,GPIO_Pin_9);
  97.                         }
  98.                         //保温计时开始
  99.                         times++;
  100.                         
  101.                         if(times==30)
  102.                         {
  103.                                 if(time2!=0)
  104.                                         number=number-1;
  105.                                 times=0;        
  106.                         }
  107.                 }
  108.                 else
  109.                 {
  110.                         GPIO_ResetBits(GPIOB,GPIO_Pin_7);//红灯亮
  111.                         GPIO_SetBits(GPIOB,GPIO_Pin_9);
  112.                 }
  113.   }
  114. }




复制代码

所有资料51hei提供下载:
STM32F103C8T6核心板程序.rar (385.19 KB, 下载次数: 122)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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