这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 漓东e学堂 » 30号作业 【 更新】外部中断清零和iic上电计数.

共41条 1/5 1 2 3 4 5 ›| 跳转至

30号作业 【 更新】外部中断清零和iic上电计数.

菜鸟
2014-10-22 23:53:10     打赏

焊接成果(截图):http://forum.eepw.com.cn/thread/262630/4#38


stm32调试视频:http://forum.eepw.com.cn/thread/262630/4#37


视频:http://forum.eepw.com.cn/thread/262630/1#4

z型led和rgb代码:http://forum.eepw.com.cn/thread/262630/1#6


keil安装加破解:http:///forum.eepw.com.cn/thread/262433/1#1


 stm32按键切换 数码管计数视频(含有代码):http://forum.eepw.com.cn/thread/262630/1#7


stm32串口控制灯的代码:http://forum.eepw.com.cn/thread/262630/2#18

stm32串口控制流水灯(顺,逆时针)视频:http://forum.eepw.com.cn/thread/262630/2#19


stm32外部中断+独立按键控制led灯的亮与灭(代码+视频+串口调试助手):forum.eepw.com.cn/thread/262630/3#25


stm32定时器中断代码(视频还没来得及录,tim7定时器用不上,不懂为什么.....求各位大虾指导一下)http://forum.eepw.com.cn/thread/262630/3#28

stm32定时器视频已补上,求大家不要吐槽额 http://forum.eepw.com.cn/thread/262630/3/#28


stm32 pwm控制的跑马灯(代码和视频):http://forum.eepw.com.cn/thread/262630/4#31

ADC--PWM控制跑马灯(视频和代码):http://forum.eepw.com.cn/thread/262630/4#36


stm32iic上电计数(视频和代码):http://forum.eepw.com.cn/thread/262630/4#34


spi作业:http://forum.eepw.com.cn/thread/262630/4#40


系统滴答时钟18b20读取18b20的温度与id:http://forum.eepw.com.cn/thread/262630/4#39







高工
2014-10-22 23:56:42     打赏
2楼

只有代码?

坐等更新


菜鸟
2014-10-23 00:07:19     打赏
3楼

明天在录个视频,可好?


菜鸟
2014-10-25 09:23:04     打赏
4楼

专家
2014-10-25 09:28:05     打赏
5楼
不错,加油哦

菜鸟
2014-10-25 09:28:29     打赏
6楼
STM32代码:
/* Includes ------------------------------------------------------------------*/  
#include "stm32f10x.h"  
#include "stm32_eval.h"  
GPIO_InitTypeDef GPIO_InitStructure;    	//结构体的命名
  
void RCC_Configuration(void)  //RCC时钟配置函数  
{  
  RCC_DeInit();        //复位外设RCC中所有寄存器的值为默认值  
      
  RCC_HSICmd(ENABLE);  //使能外设RCC  
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//判断RCC的标志位是否被RESET   
    
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//配置系统的嘀嗒时钟函数  
    
  RCC_HSEConfig(RCC_HSE_OFF);  //关闭高速外部时钟
  RCC_LSEConfig(RCC_LSE_OFF);  //关闭低速外部时钟
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz  
  RCC_PLLCmd(ENABLE);  //使能外设PLL  
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //判断RCC的标志位是否被RESET   
  
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);//ADC速率为RCC_PCLK2/4  ,配置低速ADC时钟等于SYSCLK/4 
  RCC_PCLK2Config(RCC_HCLK_Div1);   // 配置高速APB时钟等于SYSCLK   
  RCC_PCLK1Config(RCC_HCLK_Div2);  //配置低速APB时钟等于SYSCLK/2  
  RCC_HCLKConfig(RCC_SYSCLK_Div1);  //配置AHB时钟 AHB时钟等于SYSCLK    
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟SYSCLK=PLL时钟  
  while(RCC_GetSYSCLKSource() != 0x08);            //关闭蜂鸣器  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //使能外设 GPIOD端口时钟 
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  //端口配置PD.2
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO速率  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO输出模式  
  GPIO_Init(GPIOD, &GPIO_InitStructure);//应用结构体的成员  
    GPIO_ResetBits(GPIOD,GPIO_Pin_2); //重置GPIOD  
}  
  
void GPIO_INIT()  //GPIO的初始化  
{  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能外设GPIOC端口时钟 
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能外设GPIAC端口时钟   
  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; //端口配置PB.0至PB.7 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速率为50MHz  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIOS输出模式 (推挽输出) 
  GPIO_Init(GPIOC, &GPIO_InitStructure);  //根据设定参数初始化GPIOB.0至GPIOB.7
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
}  
  
void delay_us(u32 n)   //延时1us  
{  
    u8 j;  
    while(n--)  
    for(j=0;j<10;j++);  
}  
  
void  delay_ms(u32 n)  //延时1ms  
{  
    while(n--)  
    delay_us(1000);  
}  
  
  
  
int main(void)      //主函数开始  
{   
    RCC_Configuration();//调用时钟RCC函数  
 GPIO_INIT();         //调用GPIO函数  
  GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//    led全灭  
 GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);//rgb全灭  
  
    while(1){  
                    GPIO_ResetBits(GPIOC,GPIO_Pin_3);  //亮灯  
        delay_ms(100);  //延时100ms         
        GPIO_SetBits(GPIOC,GPIO_Pin_3); //灭灯          
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_2);  //亮灯  
        delay_ms(100);  
  
                GPIO_SetBits(GPIOC,GPIO_Pin_2);   //灭灯  
                     
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_1);    //亮灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_1);  //灭                                delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_0);   //亮灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_0);    //灭灯  
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_7); //亮灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_7);       //灭灯      
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_6);   //亮灯                         delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_6);     //灭灯        
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_5);  //亮灯                      delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_5);       //灭灯   
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_4);    //亮灯   
        delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_4);       //灭灯   
        delay_ms(100)   ;  
      
          
          
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);  //亮蓝灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_1);      //灭蓝灯  
        delay_ms(100);  
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);  //亮红灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_2);      //灭红灯  
        delay_ms(100);  
        GPIO_ResetBits(GPIOA,GPIO_Pin_3);//亮绿灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_3);         //灭绿灯  
        delay_ms(100)   ;  
        GPIO_ResetBits(GPIOA,GPIO_Pin_3);//亮绿灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_3);       //灭绿灯  
        delay_ms(100)   ;  
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);//亮红灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_2);     //灭红灯  
        delay_ms(100);  
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);//亮蓝灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_1);         //灭蓝灯  
        delay_ms(100);  
      
    }  
      
}  

 



菜鸟
2014-10-29 13:40:09     打赏
7楼

c语言不会,c代码真难写啊!!,学渣的世界,学霸不懂。

stm32按键切换,数码管计数视频:





视频地址:http://player.youku.com/player.php/sid/XODEzOTA0NTky/v.swf

stm32按键切换数码管计数代码:

#include "stm32f10x.h"  
#include "stm32_eval.h"  
GPIO_InitTypeDef GPIO_InitStructure; //结构体的命名 
  
void RCC_Configuration(void)  
{  
  RCC_DeInit(); //复位外设RCC的所有寄存器至缺省值(默认值) 
      
  RCC_HSICmd(ENABLE);  //使能外设RCC高速内部时钟 
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //判断RCC的标志位是否被RESET   
    
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); //配置系统的嘀嗒时钟函数   
    
  RCC_HSEConfig(RCC_HSE_OFF);   //关闭高速外部时钟
  RCC_LSEConfig(RCC_LSE_OFF);   //关闭低速外部时钟
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz  
  RCC_PLLCmd(ENABLE);  //使能外设PLL  
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  //判断RCC的标志位是否被RESET  
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);  ADC速率为RCC_PCLK2/4  ,配置低速ADC时钟等于SYSCLK/4 
  RCC_PCLK2Config(RCC_HCLK_Div1);  // 配置高速APB时钟等于SYSCLK   
  RCC_PCLK1Config(RCC_HCLK_Div2);  //配置低速APB时钟等于SYSCLK/2  
  RCC_HCLKConfig(RCC_SYSCLK_Div1);   //配置AHB时钟 AHB时钟等于SYSCLK   
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //配置系统时钟SYSCLK=PLL时钟  
  while(RCC_GetSYSCLKSource() != 0x08);     //关闭蜂鸣器  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //使能外设 GPIOD端口时钟  
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //端口配置PD.2 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  ;//GPIO速率  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //GPIO输出模式  
  GPIO_Init(GPIOD, &GPIO_InitStructure);  //应用结构体的成员  
    GPIO_ResetBits(GPIOD,GPIO_Pin_2);  //重置GPIOD.2
}  
  
void GPIO_INIT()//输入输出的初始化  
{  
  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//使能外设GPIOC端口时钟   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能外设GPIAC端口时钟   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;   //端口配置PB.0至PB.7 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //GPIO速率为50MHz  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  //GPIOS输出模式 (推挽输出) 
      
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能外设 GPIOB端口时钟   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//根据设定参数初始化GPIOB.0至GPIOB.7  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIOS输出模式 (推挽输出) 
  GPIO_Init(GPIOB, &GPIO_InitStructure);  //根据设定参数初始化GPIOB.0至GPIOB.7
      
}  
  
void delay_us(u32 n)  //延时1us  
{  
    u8 j;  
    while(n--)  
    for(j=0;j<10;j++);  
}  
  
void  delay_ms(u32 n)     //延时1ms  
{  
    while(n--)  
    delay_us(1000);  
}  
   
//定义一个数组,用来显示数字0到9  
 int table[10]={GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8 ,GPIO_Pin_9|GPIO_Pin_12 ,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5,  
GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5,GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5,  
GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8|GPIO_Pin_5,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12,  
GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14  
  
};     
  
void s2_20(char temp)   //定义一个函数,在数码管上显示数字  
{  
    char ge=0,shi=0;  //定义个位 十位
    shi=temp/10;  //十位
    ge=temp%10;  //个位
    GPIO_SetBits(GPIOB,GPIO_Pin_15);  //PB.15 输出高
              GPIO_ResetBits(GPIOB,table[shi]);  
          delay_ms(5);    
            GPIO_ResetBits(GPIOB,GPIO_Pin_15); //PB.15 输出低 
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14); //PB.0到PB.15 输出高 
              
             GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB.1 输出高  
              GPIO_ResetBits(GPIOB,table[ge]);  //个位上显示的数值
  
          delay_ms(5);  
                GPIO_ResetBits(GPIOB,GPIO_Pin_1);  //PB.1 输出低
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14); //PB.0到PB.15 输出高  
            if(temp>30)  //若temp>30
            {  
                    GPIO_SetBits(GPIOB,GPIO_Pin_15); //PB.15 输出高 
              GPIO_ResetBits(GPIOB,table[shi]); //显示十位上的数值 
          delay_ms(100);  
            GPIO_ResetBits(GPIOB,GPIO_Pin_15);  //PB.15 输出低
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  //PB.0到PB.15 输出高  
              
             GPIO_SetBits(GPIOB,GPIO_Pin_1);  //PB.1 输出高 
              GPIO_ResetBits(GPIOB,table[ge]);  //个位上显示的数值
  
          delay_ms(150);  
                GPIO_ResetBits(GPIOB,GPIO_Pin_1);   //PB.1 输出低
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  //PB.0到PB.15 输出高   
  
            }  
  
}  
  
  
void func()  //定义一个功能函数,使得按键按下去之后,数码管能计数  
{  
    
    char a = 0, b = 0,count=0;   //定义三个计数器。  
    while(1){  
     if(!GPIO_ReadInputDataBit (GPIOC,GPIO_Pin_10)) //判断按键是否按下 PC.10 
      {  
                    delay_ms(100);  
         if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10))  //判断按键是否按下 PC.10 
               {  
                                 count++;  //count自加1;  
              }  
                        }  
             if(count%2==1){     //对2求余==1;
                                                            if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))  //判断按键是否按下 PC.8  
                                                 {   delay_ms(80);     
                                                             if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))  //判断按键是否按下 PC.8  
                                                                             {a++;}  
                                                            }    
                                                                if(a>100)  
                                   {a=0;}  //a>100,a置0;  
                                                        s2_20(a);  
            }  
      
       if(count%2==0){  
           if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)) //判断按键是否按下 PC.9  
         {delay_ms(80);     
          if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)){b++;}}   //判断按键是否按下 PC.9  b计数器自加1 
                 if(b>100){b=0;}    /若b的值大于100,则b清零
                 s2_20(b);} //调用函数
     
       }     
  
}  
  
  
      
  
int main(void)     
{        
     
      RCC_Configuration();       //调用函数  
         GPIO_INIT();      //调用函数  
      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  //关闭数码管  
            func();  //调用功能函数  
       
     }     

 



高工
2014-10-30 23:22:11     打赏
8楼

func函数里面count%2==1和count%2==0

这两个条件用得有意思

解释一下


菜鸟
2014-10-30 23:44:42     打赏
9楼

首先用count记下s3按键的次数,count%2==0,就是count对2进行求余,即count是偶数,列如4对2求余就等于0;而count%2==1,证明count是奇数,例如5%2==1,道理是一样的。个人觉得也可以理解为真和假的意思,也就是对应二进制中1为真,0为假!

不知道这样理解对吗??


菜鸟
2014-10-30 23:46:48     打赏
10楼

谢谢

 


共41条 1/5 1 2 3 4 5 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]