这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 漓东e学堂 » 2.10更新】29号的作业进程

共8条 1/1 1 跳转至

2.10更新】29号的作业进程

菜鸟
2015-12-11 14:09:16     打赏


菜鸟
2015-12-11 22:14:13     打赏
2楼


和谐好,打开就可以用



菜鸟
2015-12-11 22:21:00     打赏
3楼

  ******************************************************************************
   * @file    GPIO/IOToggle/main.c
   * @author  MCD Application Team
   * @version V3.5.0
   * @date    08-April-2011
   * @brief   Main program body.
   ******************************************************************************
   * @attention
   *
   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
   *
   * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
   ******************************************************************************
   */

 /* Includes ------------------------------------------------------------------*/
 #include "stm32f10x.h"
 #include "stm32_eval.h"

 GPIO_InitTypeDef GPIO_InitStructure;

 void RCC_Configuration(void)
 {
   RCC_DeInit();
    
   RCC_HSICmd(ENABLE);
   while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == 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);
   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
   RCC_ADCCLKConfig(RCC_PCLK2_Div4);
   RCC_PCLK2Config(RCC_HCLK_Div1);
   RCC_PCLK1Config(RCC_HCLK_Div2);
   RCC_HCLKConfig(RCC_SYSCLK_Div1);
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
   while(RCC_GetSYSCLKSource() != 0x08);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOD, &GPIO_InitStructure);
 GPIO_ResetBits(GPIOD,GPIO_Pin_2);
 }

 void delay_us(u32 n)
 {
 u8 j;
 while(n--)
 for(j=0;j<10;j++);
 }
 void delay_ms(u32 n)
 {
 while(n--)
 delay_us(1000);
 }

 /**
   * @brief  Main program.
   * @param  None
   * @retval None
   */
 int main(void)
 { unsigned char flag=0;

 RCC_Configuration();

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

 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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOC, &GPIO_InitStructure);


 while(1)
 {
 GPIO_SetBits(GPIOC,GPIO_Pin_0);
 GPIO_SetBits(GPIOC,GPIO_Pin_1);
 GPIO_SetBits(GPIOC,GPIO_Pin_2);
 GPIO_SetBits(GPIOC,GPIO_Pin_3);
 GPIO_SetBits(GPIOC,GPIO_Pin_4);
 GPIO_SetBits(GPIOC,GPIO_Pin_5);
 GPIO_SetBits(GPIOC,GPIO_Pin_6);
 GPIO_SetBits(GPIOC,GPIO_Pin_7);


 
  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_1);
 delay_ms(100);
     GPIO_SetBits(GPIOC,GPIO_Pin_1);
 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_3);
 delay_ms(100);
 GPIO_SetBits(GPIOC,GPIO_Pin_3);
 delay_ms(100);
 GPIO_ResetBits(GPIOC,GPIO_Pin_4);
 delay_ms(100);
 GPIO_SetBits(GPIOC,GPIO_Pin_4);
 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_6);
 delay_ms(100);
 GPIO_SetBits(GPIOC,GPIO_Pin_6);
 delay_ms(100);
 GPIO_ResetBits(GPIOC,GPIO_Pin_7);
 delay_ms(100);
 GPIO_SetBits(GPIOC,GPIO_Pin_7);
 delay_ms(100);

 }
 }


菜鸟
2015-12-11 22:26:27     打赏
4楼


菜鸟
2015-12-11 22:37:58     打赏
5楼

菜鸟
2016-01-09 20:08:09     打赏
6楼
01.#include "stm32f10x.h"
02.#include "stm32_eval.h"
03.#include    "stdio.h"
04.#include "math.h"
05.#define buff_size  16;
06.char rx_buff[], rx_buff_count=0;
07.
08.GPIO_InitTypeDef  GPIO_InitStructure;
09.USART_InitTypeDef  USART_InitStructure;
10.NVIC_InitTypeDef  NVIC_InitStructure;
11.USART_ClockInitTypeDef  USART_ClockInitStructure;
12.
13.void RCC_Configuration(void) a
14.{
15.    RCC_DeInit();
16.    RCC_HSICmd(ENABLE);
17.    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
18.    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
19.    RCC_HSEConfig(RCC_HSE_OFF);
20.    RCC_LSEConfig(RCC_LSE_OFF);
21.    RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz
22.    RCC_PLLCmd(ENABLE);
23.    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
24.    RCC_ADCCLKConfig(RCC_PCLK2_Div4);
25.    RCC_PCLK2Config(RCC_HCLK_Div1);
26.    RCC_PCLK1Config(RCC_HCLK_Div2);
27.    RCC_HCLKConfig(RCC_SYSCLK_Div1);
28.    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
29.    while(RCC_GetSYSCLKSource() != 0x08);
30.    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
31.    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
32.    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
33.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
34.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
35.    GPIO_Init(GPIOD, &GPIO_InitStructure);
36.    GPIO_ResetBits(GPIOD,GPIO_Pin_2);//关闭蜂鸣器
37.}
38.void GPIO_INIT()
39.{
40.    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PC时钟
41.    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|
42.
43.GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
44.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
45.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
46.    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB
47.   GPIO_SetBits(GPIOB, GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|
48.
49.GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
50.}
51.
52.void USART_int(long BaudRate)
53.{   USART_InitTypeDef USART_InitStructure;
54.    USART_ClockInitTypeDef USART_ClockInitStructure;
55.     NVIC_InitTypeDef NVIC_InitStructure;
56.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//使能PA
57.
58.USART1
59.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//TX 位于PA9
60.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
61.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出
62.   GPIO_Init(GPIOA, &GPIO_InitStructure);// TX初始化 PA9
63.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;// RX位于PA10
64.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//悬空输入
65.   GPIO_Init(GPIOA, &GPIO_InitStructure);//RX初始化 PA10
66.  /* USARTx configured as follow:
67.        - BaudRate = 115200 baud
68.        - Word Length = 8 Bits
69.        - One Stop Bit
70.        - No parity
71.        - Hardware flow control disabled (RTS and CTS signals)
72.        - Receive and transmit enabled
73.  */
74.    USART_InitStructure.USART_BaudRate = BaudRate;//传输速率
75.    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长8比特
76.    USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1
77.    USART_InitStructure.USART_Parity = USART_Parity_No;//
78.    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控位
79.
80.为none
81.    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;// 接受和发送
82.    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
83.  USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
84.  USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
85.  USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
86.    USART_ClockInit(USART1, &USART_ClockInitStructure);//初始化USART1时钟
87.    USART_Init(USART1, &USART_InitStructure);//初始化USART1时钟
88.    USART_Cmd(USART1, ENABLE);
89.    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
90.    USART_Cmd(USART1, ENABLE);
91.  /* Configure four bit for preemption priority */
92.    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
93.  /* Enable the USART1 Interrupt */
94.    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //选择USART1中断通道
95.    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15;
96.    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
97.    NVIC_Init(&NVIC_InitStructure);//初始化中断
98.}
99.
100. /*微秒延时函数*/
101. void delay_us(u32 n)
102.{
103.    u8 j;
104.    while(n--)
105.    for(j=0;j<10;j++);
106.}
107.
108./*毫秒延时函数*/
109.void  delay_ms(u32 n)
110.{
111.   while(n--)
112.    delay_us(1000);
113.}
114.
115.void USART_SendStr(char *str)      //发送字符串函数
116.{
117.   while((*str)!='\0')             //发送完直至最后
118.        {USART_SendData(USART1,*str++);
119.        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
120.        }
121.unsigned int translate(char* pstr) //字符串
122.{
123.      int s = 0;
124.        while(*pstr != '\0')        //一直扫描到字符串
125.        {
126.                if(*pstr >= '0' && *pstr <= '9') //字符串中有数字0-9
127.                {
128.                        s = s * 10 + *pstr - '0';
129.                }
130.                pstr++;
131.        }
132.    return s;
133.}
134.
135. void Num(int i)
136.{
137.      switch(i)//点亮对应输入的数字
138.    {
139.        case 0 : GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|
140.
141.GPIO_Pin_13|GPIO_Pin_14);break;
142.        case 1 : GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
143.
144.                break;
145.        case 2 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|
146.
147.GPIO_Pin_14);            break;
148.        case 3 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|
149.
150.GPIO_Pin_14);            break;
151.        case 4 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12);
152.
153.                break;
154.        case 5 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|
155.
156.GPIO_Pin_14);            break;
157.        case 6 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|
158.
159.GPIO_Pin_13|GPIO_Pin_14);break;
160.        case 7 : GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);
161.
162.                break;
163.        case 8 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|
164.
165.GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);break;
166.        case 9 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|
167.
168.GPIO_Pin_12|GPIO_Pin_14); break;
169.        }
170.    }
171.    void func(char *S,char LEN)
172.{
173.    int m;
174.   GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|
175.
176.GPIO_Pin_13|GPIO_Pin_14);
177.
178.    while(1)
179.    {
180.       m=my_atoi(S);
181.
182.        GPIO_SetBits(GPIOB,GPIO_Pin_1); //打开个位数码管
183.        Num(z%10);                      //点亮各位数
184.        delay_ms(5);                    //延时
185.        GPIO_ResetBits(GPIOB,GPIO_Pin_1);//关闭个位数码管
186.        GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|
187.
188.GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
189.
190.        GPIO_SetBits(GPIOB,GPIO_Pin_15);//打开十位数码管
191.        Num(z/10);
192.        delay_ms(5);
193.        GPIO_ResetBits(GPIOB,GPIO_Pin_15);//关闭十位
194.        GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|
195.
196.GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
197.
198.        }
199.    }
200.    void input_ASK()
201.{
202.    char j;
203.    func(rx_buff,rx_buff_count);
204.    rx_buff_count=0;
205.    for (j=0;j 206.    {rx_buff[j]='\0';}
207.   // USART_SendStr("\n>");
208.}
209.
210.int main()
211.{
212.        RCC_Configuration();
213.      GPIO_INIT();
214.        USART_int(9600);
215.       // USART_SendStr("Please input like: data=\r\n");
216.        //USART_SendStr("\n>");
217.        while(1){
218.                }
219.}
220.
221.void USART1_IRQHandler(void)  //声明接收中断函数
222.{
223.  while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)  //等待接收完毕
224.  {
225.  }
226.    if(USART_ReceiveData(USART1)==0x0d)     //如果接收到回车,结束输入
227.    {input_ASK();}          //执行input_ASK()
228.    else
229.    {
230.    USART_SendData(USART1,USART_ReceiveData(USART1));      //将数据回送至超级终端
231.    rx_buff[rx_buff_count]= USART_ReceiveData(USART1);
232.        rx_buff_count++;
233.    }
234.  USART_ClearFlag(USART1, USART_FLAG_RXNE); //发送数据
235.
236.}
237.}

菜鸟
2016-01-09 20:49:32     打赏
7楼

sfr IAP_DATA     = 0xE2;
sfr IAP_ADDRH     = 0xE3;
sfr IAP_ADDRL     = 0xE4;
sfr IAP_CMD      = 0xE5;
sfr IAP_TRIG     = 0xE6;
sfr IAP_CONTR     = 0xE7;

#define           CMD_IDLE  0
#define           CMD_READ   1
#define           CMD_PROGRAM   2
#define           CMD_ERASE   3     /*¶¨ÒåFlash²Ù×÷µÈ´ýʱ¼ä¼°ÔÊÐ

íIAP/ISP/EEPROM²Ù×÷µÄ³£ÊÊý*/

#define     ENABLE_IAP0x80 //ϵͳ¹¤×÷ʱÖÓ<5Mhzʱ£¬¶ÔIAP_CONTR¼Ä´

æÆ÷ÉèÖôËÖµ
#define     ENABLE_IAP0x81 //ϵͳ¹¤×÷ʱÖÓ<10Mhzʱ£¬¶ÔIAP_CONTR¼Ä´

æÆ÷ÉèÖôËÖµ
#define     ENABLE_IAP0x82 //ϵͳ¹¤×÷ʱÖÓ<20Mhzʱ£¬¶ÔIAP_CONTR¼Ä´

æÆ÷ÉèÖôËÖµ
#define     ENABLE_IAP0x83 //ϵͳ¹¤×÷ʱÖÓ<40Mhzʱ£¬¶ÔIAP_CONTR¼Ä´

æÆ÷ÉèÖôËÖµ

IAP_ADDRESS    0x2000    //STC90C52ϵÁÐEEPROM²âÊÔÆðʼµØÖ·

void IapIdle(void)
{
IAP_CONTR=0;
IAP_CMD =0;
IAP_TRIG =0;
IAP_ADDRH=0x80;
IAP_ADDRL =0;

}

unsigned char IapReadByte(unsigned int addt)
{
unsigned char dat;
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_READ;
IAP_ADDRL=addr;
IAP_ADDRL=addr>>8
IAP_TRIG =0x46;
IAP_TRIG =0xb9;
dat = IAP_DATA;
IapIdle();


return dat;

}

void Iap ProgramByte(unsigned int addr,unsigned char dat )
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_REOGRAM;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8
IAP_DATA=date;
IAP_TRIG =0x46;
IAP_TRIG =0xb9;

IapIdle();
}

void Iap EraseSector(unsigned int addr )
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD =CMD_ERASE;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8
IAP_TRIG =0x46;
IAP_TRIG =0xb9;

IapIdle();
}
unsigned char Num=0;
void main(void)
{
unsigned long i=0;
Num = Iap ReadByte(IAP_ADDRESS+20);
Num++;
Iap EraseSector(IAP_ADDRESS);
Iap ProgramByte(IAP_ADDRESS+20,Num);
for(i=0;i {
LED0=0;
DelayMs(100);
LED0=1;
DelayMs(100);
}
while(1);
}


菜鸟
2016-02-20 19:44:07     打赏
8楼
view plaincopy to clipboardprint?
  1. #include "stdio.h"
  2. #include "stm32f10x.h"
  3. int fputc(int ch,FILE *f);
  4. /********************RCC配置*********************/
  5. void RCC_Configuration(void)
  6. {
  7. GPIO_InitTypeDef  GPIO_InitStructure;
  8. ErrorStatus HSEStartUpStatus;
  9. RCC_DeInit();
  10. RCC_HSEConfig(RCC_HSE_ON);
  11. HSEStartUpStatus = RCC_WaitForHSEStartUp();
  12. if(HSEStartUpStatus==SUCCESS)
  13. {
  14. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  15. RCC_PCLK1Config(RCC_HCLK_Div2);
  16. RCC_PCLK2Config(RCC_HCLK_Div1);
  17. RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//*设置PLL输入时钟源8x9=72M
  18. RCC_PLLCmd(ENABLE);//*打开PLL:
  19. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//*等待PLL工作:
  20. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//*设置系统时钟
  21. while(RCC_GetSYSCLKSource() != 0x08);
  22. }
  23. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
  24. /**蜂鸣器*/
  25. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
  26. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  27. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //#管脚号  关闭蜂鸣器
  28. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //#输出速度
  29. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //#输入输出模式(推挽输出)
  30. GPIO_Init(GPIOD, &GPIO_InitStructure); //#初始化
  31. GPIO_ResetBits(GPIOD,GPIO_Pin_2);
  32. }
  33. void delay_us(u32 n) //延时函数
  34. {
  35. u8 j;
  36. while(n--)
  37. for(j=0;j<10;j++);
  38. }
  39. void delay_ms(u32 n) //延时函数
  40. {
  41. while(n--)
  42. delay_us(1000);
  43. }
  44. /*****************************GPIO初始********************************/
  45. void GPIO_Inits(void)
  46. { /*结构体初始化及开启外设时钟*/
  47. GPIO_InitTypeDef  GPIO_InitStructure;
  48. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  49. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  50. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  51. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
  52. /*GPIOA--RGB初始化*/
  53. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  54. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
  55. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  56. GPIO_Init(GPIOA,&GPIO_InitStructure);
  57. GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3)
  58. }
  59. /**************************DS18B20**********************/
  60. uint8_t DS18B20_Init(void)
  61. {
  62. GPIO_InitTypeDef GPIO_InitStructure;
  63. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  64. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  65. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  66. GPIO_Init(GPIOC, &GPIO_InitStructure);
  67. Set_B20();
  68. DS18B20_Rst();
  69. return DS18B20_Presence ();
  70. }
  71. static void DS18B20_Mode_IPU(void)
  72. {
  73. GPIO_InitTypeDef GPIO_InitStructure;
  74. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  75. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  76. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  77. GPIO_Init(GPIOC, &GPIO_InitStructure);
  78. }
  79. static void DS18B20_Mode_Out_PP(void)
  80. {
  81. GPIO_InitTypeDef GPIO_InitStructure;
  82. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  83. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  84. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  85. GPIO_Init(GPIOC, &GPIO_InitStructure);
  86. }
  87. static void DS18B20_Rst(void)
  88. {
  89. /* 主机设置为输出 */
  90. DS18B20_Mode_Out_PP();
  91. Reset_B20() ;
  92. delay_us(700);
  93. Set_B20()   ;
  94. delay_us(15);
  95. }
  96. static uint8_t DS18B20_Presence(void)
  97. {
  98. uint8_t pulse_time = 0;
  99. /* 主机设置为上拉输入 */
  100. DS18B20_Mode_IPU();
  101. while( Read_B20() && pulse_time<100 )
  102. {
  103. pulse_time++;
  104. delay_us(1);
  105. }
  106. /* 经过100us后,存在脉冲都还没有到来*/
  107. if( pulse_time >=100 )
  108. return 1;
  109. else
  110. pulse_time = 0;
  111. /* 存在脉冲到来,且存在的时间不能超过240us */
  112. while( !Read_B20() && pulse_time<240 )
  113. {
  114. pulse_time++;
  115. delay_us(1);
  116. }
  117. if( pulse_time >=240 )
  118. return 1;
  119. else
  120. return 0;
  121. }
  122. static uint8_t DS18B20_ReadBit(void)
  123. {
  124. uint8_t dat;
  125. /* 读0和读1的时间至少要大于60us */
  126. DS18B20_Mode_Out_PP();
  127. Reset_B20();
  128. delay_us(10);
  129. DS18B20_Mode_IPU();
  130. //Delay_us(2);
  131. if( Read_B20() == SET )
  132. dat = 1;
  133. else
  134. dat = 0;
  135. delay_us(45);
  136. return dat;
  137. }
  138. static uint8_t DS18B20_ReadByte(void)
  139. {
  140. uint8_t i, j, dat = 0;
  141. for(i=0; i<8; i++)
  142. {
  143. j = DS18B20_ReadBit();
  144. dat = (dat) | (j<
  145. }
  146. return dat;
  147. }
  148. static void DS18B20_WriteByte(uint8_t dat)
  149. {
  150. uint8_t i, testb;
  151. DS18B20_Mode_Out_PP();
  152. for( i=0; i<8; i++ )
  153. {
  154. testb = dat&0x01;
  155. dat = dat>>1;
  156. /* 写0和写1的时间至少要大于60us */
  157. if (testb)
  158. {
  159. Reset_B20();
  160. /* 1us < 这个延时 < 15us */
  161. delay_us(8);
  162. Set_B20();
  163. delay_us(58);
  164. }
  165. else
  166. {
  167. Reset_B20();
  168. /* 60us < Tx 0 < 120us */
  169. delay_us(70);
  170. Set_B20();
  171. delay_us(2);
  172. }
  173. }
  174. }
  175. static void DS18B20_SkipRom ( void )
  176. {
  177. DS18B20_Rst();
  178. DS18B20_Presence();
  179. DS18B20_WriteByte(0XCC); /* 跳过 ROM */
  180. }
  181. static void DS18B20_MatchRom ( void )
  182. {
  183. DS18B20_Rst();
  184. DS18B20_Presence();
  185. DS18B20_WriteByte(0X55); /* 匹配 ROM */
  186. }
  187. float DS18B20_GetTemp_SkipRom ( void )
  188. {
  189. uint8_t tpmsb, tplsb;
  190. short s_tem;
  191. float f_tem;
  192. DS18B20_SkipRom ();
  193. DS18B20_WriteByte(0X44); /* 开始转换 */
  194. DS18B20_SkipRom ();
  195. DS18B20_WriteByte(0XBE); /* 读温度值 */
  196. tplsb = DS18B20_ReadByte();
  197. tpmsb = DS18B20_ReadByte();
  198. s_tem = tpmsb<<8;
  199. s_tem = s_tem | tplsb;
  200. if( s_tem < 0 ) /* 负温度 */
  201. f_tem = (~s_tem+1) * 0.0625;
  202. else
  203. f_tem = s_tem * 0.0625;
  204. return f_tem;
  205. }
  206. void DS18B20_ReadId ( uint8_t * ds18b20_id )
  207. {
  208. uint8_t uc;
  209. DS18B20_WriteByte(0x33); //读取序列号
  210. for ( uc = 0; uc < 8; uc ++ )
  211. ds18b20_id [ uc ] = DS18B20_ReadByte();
  212. }
  213. float DS18B20_GetTemp_MatchRom ( uint8_t * ds18b20_id )
  214. {
  215. uint8_t tpmsb, tplsb, i;
  216. short s_tem;
  217. float f_tem;
  218. DS18B20_MatchRom (); //匹配ROM
  219. for(i=0;i<8;i++)
  220. DS18B20_WriteByte ( ds18b20_id [ i ] );
  221. DS18B20_WriteByte(0X44); /* 开始转换 */
  222. DS18B20_MatchRom (); //匹配ROM
  223. for(i=0;i<8;i++)
  224. DS18B20_WriteByte ( ds18b20_id [ i ] );
  225. DS18B20_WriteByte(0XBE); /* 读温度值 */
  226. tplsb = DS18B20_ReadByte();
  227. tpmsb = DS18B20_ReadByte();
  228. s_tem = tpmsb<<8;
  229. s_tem = s_tem | tplsb;
  230. if( s_tem < 0 ) /* 负温度 */
  231. f_tem = (~s_tem+1) * 0.0625;
  232. else
  233. f_tem = s_tem * 0.0625;
  234. return f_tem;
  235. }
  236. int main()
  237. {
  238. uint8_t uc, ucDs18b20Id [ 8 ];
  239. RCC_Configuration();
  240. GPIO_Inits();
  241. USART_int(9600);
  242. while( DS18B20_Init() )
  243. printf("\r\n no ds18b20 exit \r\n");
  244. printf("\r\n Yes ds18b20 \r\n");
  245. DS18B20_ReadId ( ucDs18b20Id  ); // 读取 DS18B20 的序列号
  246. printf("\r\nDS18B20的序列号是: 0x");
  247. for ( uc = 0; uc < 8; uc ++ ) // 打印 DS18B20 的序列号
  248. printf ( "%.2x", ucDs18b20Id [ uc ] );
  249. for(;;)
  250. {
  251. static unsigned int i=0;
  252. float a,b;
  253. if(i==10)
  254. {
  255. printf ( "\r\n第10秒:温度: %.1f\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) ); // 打印通过 DS18B20 序列号获取的温度值
  256. a=DS18B20_GetTemp_MatchRom ( ucDs18b20Id );
  257. delay_ms(1000); /* 1s 读取一次温度值 */
  258. i++;
  259. }
  260. else{}
  261. if(i<10)
  262. {
  263. printf ( "\r\n温度: %.1f\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) ); // 打印通过 DS18B20 序列号获取的温度值
  264. delay_ms(1000); /* 1s 读取一次温度值 */
  265. i++;
  266. }
  267. if(i>10)
  268. {
  269. printf ( "\r\n10秒后:温度: %.1f\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) ); // 打印通过 DS18B20 序列号获取的温度值
  270. b=DS18B20_GetTemp_MatchRom ( ucDs18b20Id );
  271. delay_ms(1000); /* 1s 读取一次温度值 */
  272. i++;
  273. if((b-a)>0.9)
  274. {GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
  275. }
  276. else{}
  277. if((b-a)<0.9)
  278. {
  279. GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
  280. }
  281. else{}
  282. }
  283. else{}
  284. }
  285. }
  286. int fputc(int ch,FILE *f)
  287. {
  288. USART_SendData(USART1, (uint8_t) ch);
  289. while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  290. {}
  291. return ch;
  292. }



共8条 1/1 1 跳转至

回复

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