找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3420|回復: 12
打印 上一主題 下一主題
收起左側

有源代碼,如何把整個Keil工程給弄出來啊?STM32F103C8T6,STLINKSW.我想要整個工程

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:828136 發(fā)表于 2021-3-21 21:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
200黑幣
求大神告知方法

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "adc.h"
#include "timer.h"
#include "usart1.h"
#include "usart3.h"
#include "LCD1602.h"
#include "string.h"
#include "stdio.h"
#include "dht11.h"
#include "stmflash.h"

#define WriteFlashAddress        ((u32)0x08010000)//讀寫起始地址

#define RATIO 800                //系數(shù),建議選擇800-1000
u16 PM25_Value = 0;                     //PM = ((pmBuf[1]<<8)+pmBuf[2])/1024*8*ratio
u16 PM25_Value_max = 200; //PM2.5報警值
u8 pmBuf[7];

void Change_data_handle(void);
void  SHOW_AND_BAOJING_Handle(void);
u8 KEY_SCAN(void);             //按鍵函數(shù)

u8 SHOW_BUF[16],SEND_BUF[16];
u8 key,PPM,Temperature,HUM;
u16 PPM_MAX=60,Temperature_MAX=40,HUM_MAX=70;//煙霧溫濕度上限初始值
u16 write_buf[5];

///////串口相關
extern unsigned char         B_RX_OK;
extern u16 USART3_RX_CNT;
extern u8 USART3_RX_BUF[COM_RX_Lenth + 1];

void save_data()//存儲數(shù)據(jù)
{
          write_buf[0]=1111;
                write_buf[1]=PPM_MAX;
                write_buf[2]=Temperature_MAX;
                write_buf[3]=HUM_MAX;
                write_buf[4]=PM25_Value_max;
          STMFLASH_Write(WriteFlashAddress,write_buf,5);
}

void read_data()//讀取數(shù)據(jù)
{
          static u16 chcek = 0;
          STMFLASH_Read(WriteFlashAddress,write_buf,5);
          chcek = write_buf[0];
          if(chcek != 1111)//單片機第一次使用時,chcek不等于1111,以下則是保存一下數(shù)據(jù),再進行讀取
                {
                                save_data();
                          delay_ms(100);
                          STMFLASH_Read(WriteFlashAddress,write_buf,5);
                }
                PPM_MAX = write_buf[1]%100;//煙霧上限值
                Temperature_MAX = write_buf[2]%100;//溫度上限值
                HUM_MAX = write_buf[3]%100;//濕度上限值
                PM25_Value_max = write_buf[4]%1000;//PM上限值
}

void Get_PM(void)//獲取PM2.5
{
    char i = 0;
    char j = 0;

          USART3_RX_CNT = 0;
    if(B_RX_OK == 1)//接收到數(shù)據(jù)
    {
        for(i = 0; i<8; i++)
        {
            if((USART3_RX_BUF[ i] == 0xAA)&&(USART3_RX_BUF[i+6]==0xFF))//判斷值是否正確
            {
                goto find2;
            }
        }
        goto end2;
find2:
        for(j = 0; j<7; j++)
        {
            pmBuf[j] = USART3_RX_BUF[i+j];//數(shù)據(jù)接收
        }

        PM25_Value = (unsigned int)((pmBuf[1]*256)+pmBuf[2])*5/2048.0*RATIO;//計算PM2.5
        B_RX_OK = 0;
    }
end2:
    return;
}

int main(void)
{        
  u16 test,test_adc;

        delay_init();                     //延時函數(shù)初始化         
        NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
        KEY_IO_Init();      
  USART3_Init(2400);//串口3初始化,波特率2400        
        TIM2_Int_Init(1000,72-1);  //定時器初始化,定時1MS
        read_data();//開機讀取一次存儲值
        delay_ms(300);
  DHT11_Init();        //DHT11初始化
  BEEP_DISENABLE();   //蜂鳴器初始化
        LCD_Init();          // 1602初始化
        Adc_Init();  //ADC初始化

  while(1)
        {
                        test_adc = Get_Adc_Average(ADC_Channel_9,20);//讀取通道9的AD值,20ms讀取一次
                        PPM = test_adc*99/4096;//12位AD,把AD值轉(zhuǎn)換成百分比0~99
                        PPM = PPM >= 99? 99: PPM;//最大值不能超過99
                  DHT11_Read_Data(&Temperature,&HUM);//讀取溫濕度值
                  Get_PM();//獲取PM2.5值
                  if(PM25_Value > 999)PM25_Value = 999;
                        SHOW_AND_BAOJING_Handle();
      Change_data_handle();//按鍵調(diào)節(jié)
                        delay_ms(10);
  }
}


extern u8 FLICKER;

void  SHOW_AND_BAOJING_Handle(void)
{
    unsigned char show_buf[16];//顯示緩存區(qū)

          if(Temperature >= Temperature_MAX)//溫度超限
                {
                         if(FLICKER)//超標顯示閃爍
                         {
                                        LCD_Write_String(0,0,"         ");
                         }
                         else
                         {
                                        sprintf(show_buf,"TEMP:%02dC",(u16)Temperature);//轉(zhuǎn)換顯示格式為TEMP:00C
                                        LCD_Write_String(0,0,show_buf);//顯示
                         }
                }
                else
                {
                        sprintf(show_buf,"TEMP:%02dC",(u16)Temperature);//轉(zhuǎn)換顯示格式為TEMP:00C
                        LCD_Write_String(0,0,show_buf);//顯示
                }
                if(HUM >= HUM_MAX)//濕度超限
                {
                         if(FLICKER)//超標顯示閃爍
                         {
                                        LCD_Write_String(9,0,"       ");
                         }
                         else
                         {
                                        sprintf(show_buf,"HUM:%02d%%",(u16)HUM);//轉(zhuǎn)換顯示格式為HUM:00%
                                        LCD_Write_String(9,0,show_buf);//顯示
                         }
                }
                else
                {
                        sprintf(show_buf,"HUM:%02d%%",(u16)HUM);//轉(zhuǎn)換顯示格式為HUM:00%
                        LCD_Write_String(9,0,show_buf);
                }

                if(PPM >= PPM_MAX)//煙霧超限
                {
                         if(FLICKER)//超標顯示閃爍
                         {
                                        LCD_Write_String(0,1,"      ");
                         }
                         else
                         {
                                        sprintf(show_buf,"YW:%02d%%",PPM);//轉(zhuǎn)換顯示格式為SMOKE:00%
                                        LCD_Write_String(0,1,show_buf);
                         }
                }
                else
                {
                        sprintf(show_buf,"YW:%02d%%",PPM);//轉(zhuǎn)換顯示格式為SMOKE:00%
                        LCD_Write_String(0,1,show_buf);
                }

                if(PM25_Value >= PM25_Value_max)//PM2.5超限
                {
                         if(FLICKER)//超標顯示閃爍
                         {
                                        LCD_Write_String(7,1,"         ");
                         }
                         else
                         {
                                        sprintf(show_buf,"P%03dug/m3%",PM25_Value);//轉(zhuǎn)換顯示格式為P000ug/m3
                                        LCD_Write_String(7,1,show_buf);
                         }
                }
                else
                {
                        sprintf(show_buf,"P%03dug/m3%",PM25_Value);//轉(zhuǎn)換顯示格式為P000ug/m3
                        LCD_Write_String(7,1,show_buf);
                }
    if(Temperature >= Temperature_MAX || HUM >= HUM_MAX || PPM >= PPM_MAX || PM25_Value >= PM25_Value_max)//溫度濕度煙霧pm超限
                {
      BEEP_ENABLE(); //蜂鳴器報警               
                        FANG = 1;
                }                        
                else
                {
                        BEEP_DISENABLE();
                        FANG = 0;
                }                        
}

u8 KEY_SCAN(void)
{
          u8 res = 0;
    if(!KEY1)
                {
                   delay_ms(10);
                         if(!KEY1)
                   {
                                        while(!KEY1);//卡死
                                        res = 1;                 
                   }
                 }
    if(!KEY2)
                {
                   delay_ms(10);
                         if(!KEY2)
                   {
                                        while(!KEY2);//卡死
                                        res = 2;                 
                   }
                 }
    if(!KEY3)
                {
                   delay_ms(10);
                         if(!KEY3)
                   {
                                        while(!KEY3);//卡死
                                        res = 3;                 
                   }
                 }                 
                 return res;
}

void Change_data_handle(void)
{
    u8 key;
          static u8 MODE = 0;
          key = KEY_SCAN();//讀取按鍵值
          if(key == 1)//按鍵1按下
                {
                         MODE++;
                         LCD_Clear();//清屏
                         delay_ms(100);
          }
                while(MODE)
                {
                    key = KEY_SCAN();
                          switch(MODE)
                                {
                                  case 1: //設置溫度
                                                    //顯示
                                                    LCD_Write_String(0,0,"Set  the  TEMP ");
                                              LCD_Write_String(0,1,"max:");
                                              LCD_Write_Char(8,1,0xdf);
                                              LCD_Write_Char(9,1,'C');
                                                    if(key == 2 && Temperature_MAX < 99) Temperature_MAX++;//按鍵2按下,值加1
                                              if(key == 3 && Temperature_MAX > 0) Temperature_MAX--;//按鍵3按下,值減1
                                                          LCD1602_write_long(6,1,Temperature_MAX,2);//顯示值
                                              //存儲值
                                                                save_data();

                       delay_ms(10);                                                        
                                        break;
                                        case 2: //設置濕度
                                                    //顯示
                                                    LCD_Write_String(0,0,"Set  the  HUM ");
                                              LCD_Write_String(0,1,"max:");
                                              LCD_Write_String(8,1,"%");
                                                    if(key == 2 && HUM_MAX < 99) HUM_MAX += 1;//按鍵2按下,值加1
                                              if(key == 3 && HUM_MAX > 0) HUM_MAX -= 1;//按鍵3按下,值減1
                                                          LCD1602_write_long(6,1,HUM_MAX,2);
                                              //存儲值
                                                                save_data();
                       delay_ms(10);                                                        
                                        break;
                                        case 3: //設置煙霧
                                                    //顯示
                                                    LCD_Write_String(0,0,"Set the  SMOKE ");
                                              LCD_Write_String(0,1,"max:");
                                              LCD_Write_String(10,1,"% ");
                                                    if(key == 2 && PPM_MAX < 99) PPM_MAX += 1;//按鍵2按下,值加1
                                              if(key == 3 && PPM_MAX > 0) PPM_MAX -= 1;//按鍵3按下,值減1
                LCD1602_write_long(8,1,PPM_MAX,2);
                                              //存儲值
                                                                save_data();
                       delay_ms(10);                                                        
                                        break;
                                        case 4: //設置PM2.5
                                                    //顯示
                                                    LCD_Write_String(0,0,"Set the  PM2.5 ");
                                              LCD_Write_String(0,1,"max:");
                                              LCD_Write_String(8,1,"ug/m3");
                                                    if(key == 2 && PM25_Value_max < 999) PM25_Value_max += 1;//按鍵2按下,值加1
                                              if(key == 3 && PM25_Value_max > 0) PM25_Value_max -= 1;//按鍵3按下,值減1
                LCD1602_write_long(5,1,PM25_Value_max,3);
                                                                save_data();//存儲值

                       delay_ms(10);                                                        
                                        break;
                                        default: break;
                                }
                    if(key == 1)
                                {
                      MODE++;
                                  LCD_Clear();
                                        if(MODE == 5)//按下次數(shù)等于4退出設置
                                        {
                                                MODE = 0;        
                                        }
                                }
                        }

}        

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:752974 發(fā)表于 2021-3-22 08:39 | 只看該作者
不明白你的問題是什么!如果想利用這些代碼或是一部分,自己建一個工程或找個現(xiàn)成的,修改一下,保留自己需要的,然后,把這些代碼中有用的移進去就可以了。
回復

使用道具 舉報

板凳
ID:168857 發(fā)表于 2021-3-22 11:03 | 只看該作者
沒明白什么意思,你是想把別人的代碼摘取出來為keil工程呢,還是想把別人的程序刪除,只保留工程文件
回復

使用道具 舉報

地板
ID:781556 發(fā)表于 2021-3-22 12:37 | 只看該作者
首先確認你的源碼是完整有效的源碼,
2.把你的問題整理一下:你到底是不會創(chuàng)建工程?不會編譯操作?還是找不到關聯(lián)的頭文件?
你的問題不是不知道問題在哪裏,而是沒有弄清楚問題表象背後的關聯(lián)點。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:828136 發(fā)表于 2021-3-22 13:45 | 只看該作者
mvwtest 發(fā)表于 2021-3-22 12:37
首先確認你的源碼是完整有效的源碼,
2.把你的問題整理一下:你到底是不會創(chuàng)建工程?不會編譯操作?還是找 ...

沒有頭文件
回復

使用道具 舉報

6#
ID:828136 發(fā)表于 2021-3-22 13:46 | 只看該作者
munuc_w 發(fā)表于 2021-3-22 08:39
不明白你的問題是什么!如果想利用這些代碼或是一部分,自己建一個工程或找個現(xiàn)成的,修改一下,保留自己需 ...

頭文件那邊總是報錯,不會弄
回復

使用道具 舉報

7#
ID:828136 發(fā)表于 2021-3-22 13:47 | 只看該作者
hebaobao 發(fā)表于 2021-3-22 11:03
沒明白什么意思,你是想把別人的代碼摘取出來為keil工程呢,還是想把別人的程序刪除,只保留工程文件

找不到關聯(lián)的頭文件,小白一個

回復

使用道具 舉報

8#
ID:25481 發(fā)表于 2021-3-22 14:40 | 只看該作者
你這個僅僅是主程序,外設部分的驅(qū)動程序和頭文件都沒有,無法搞,
回復

使用道具 舉報

9#
ID:885462 發(fā)表于 2021-3-22 19:01 | 只看該作者
回復

使用道具 舉報

10#
ID:885462 發(fā)表于 2021-3-22 19:01 | 只看該作者
回復

使用道具 舉報

11#
ID:402026 發(fā)表于 2021-3-22 21:23 | 只看該作者
學習辛苦事,自己下功夫!
回復

使用道具 舉報

12#
ID:139866 發(fā)表于 2021-3-23 10:37 | 只看該作者
你問出這個問題來就知道你還不會玩keil,C語言可能也不太懂,只想著抄捷徑是不行的,最好還是一點點扎實學

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

13#
ID:752974 發(fā)表于 2021-3-23 11:35 | 只看該作者
1663780290 發(fā)表于 2021-3-22 13:46
頭文件那邊總是報錯,不會弄

STM32F103C8T6工程很多,網(wǎng)上也能找到,把你需要的代碼添加進去就可以了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表