IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Keil使用与编程 -> 正文阅读

[嵌入式]Keil使用与编程

前言

记录学习,仅供参考

编程前的配置工作

先把keil的文件夹加到STC-ISP中
在这里插入图片描述
在这里插入图片描述
然后可以在keil中建工程了
在这里插入图片描述
先新建一个文件夹放工程文件
在这里插入图片描述
输入工程的名字点击保存。
在这里插入图片描述
这里选择第二个
在这里插入图片描述
板子的型号选择正确,后面弹出来的选择是

在这里插入图片描述
现在工程就建好了,然后要加入必要的库文件。
在这里插入图片描述
点击这里
在这里插入图片描述

勾选生成hex文件

在这里插入图片描述
因为我们用C语言写代码,所以要加入相关的头文件。如图

这里要加的东西再学习通课程网站的资料里
在这里插入图片描述
下载解压好,上面图里要用到这个路径

在这里插入图片描述
这里如图选择好,一路点击确定。

在这里插入图片描述
这里新建一个文件。先保存,保存到新建工程的那个文件夹里。命名后缀要是.c

在这里插入图片描述
这里点开Target,右键点击Source Group 点击Manage

在这里插入图片描述
在这里插入图片描述
要加入刚保存的c文件和库文件,库文件在刚在课程网站下载的文件里面,里面的source里,选择全部文件类型才能看到库文件。记得只用点击一下add就行了,之后点close,OK。

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/d4b410a7de1047f88e4947c390358ce3.png在这里插入图片描述

可以看到都加进来了,现在准备工作就做好了,可以开始开心地写程序了。
每次建工程这些都要完成一遍,不是设置一编就好

写完之后点击这里编译
在这里插入图片描述

下面解决几道练习题

在这里插入图片描述

#include "STC15F2K60S2.H"
#include "displayer.H" 
#include "sys.H"


code unsigned long SysClock=11059200L;        //必须。 (定义系统工作时钟频率,用户可以修改,且必须与实际工作频率(下载时选择的)一致

#ifdef _displayer_H_                          //显示模块选用时必须。(数码管显示译码表,用戶可修改、增加等) 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};   
	              /* 序号:   0   1    2	   3    4   5    6	  7   8	   9	 10	   11	12   13*        /
                /* 显示:   0   1    2    3    4     5    6    7   8    9  (无)   下-  中-  上-       */  
#endif



void main()
{  				
	
	  displayerInit();                              
	LedPrint(0);
		SetDisplayerArea(0,6);                           
		Seg7Print(1,2,14,15,12,2,1);	 
	MySTC_Init();
	while(1)
		MySTC_OS();
}

在这里插入图片描述

#include "sys.H"
#include "STC15F2K60S2.H"
#include "beep.H"

code unsigned long SysClock=11059200L;        //必须。 (定义系统工作时钟频率,用户可以修改,且必须与实际工作频率(下载时选择的)一致
int main(){
	
	BeepInit();
	SetBeep(1200,180);
	MySTC_Init();
	while(1)
		MySTC_OS();
	
}

在这里插入图片描述

#include "sys.H"
#include "STC15F2K60S2.H"
#include "music.H"
#include "Beep.H"

#define uchar unsigned char
code unsigned long SysClock=11059200L;        //必须。 (定义系统工作时钟频率,用户可以修改,且必须与实际工作频率(下载时选择的)一致
code uchar arr[]={
	0x31,0x10,
	0x32,0x10,
	0x33,0x10,
	0x34,0x10,
	0x35,0x10};

int main(){	
	MusicPlayerInit();
	//SetMusic
	BeepInit();
	SetPlayerMode(enumModePlay);
	SetMusic(100,0xFA,arr,10,enumMscNull);
	MySTC_Init();
	while(1)
	MySTC_OS();
	
}

在这里插入图片描述

#include "STC15F2K60S2.H"
#include "sys.H"
#include "stepmotor.h"
#include "displayer.H"  
code unsigned long SysClock=11059200L; 
#ifdef _displayer_H_                          //显示模块选用时必须。(数码管显示译码表,用戶可修改、增加等) 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};   
	              /* 序号:   0   1    2	   3    4   5    6	  7   8	   9	 10	   11	12   13  14   15     */
                  /* 显示:   0   1    2    3    4   5    6    7   8    9     10    11   -     #   H    L     */  
#endif
int main(){
	StepMotorInit();
	DisplayerInit();  
	SetDisplayerArea(0,7);
	Seg7Print(10,10,10,10,10,10,10,10);
	LedPrint(0);
	SetStepMotor(enumStepMotor2,10,100);
	MySTC_Init();
	while(1)
		MySTC_OS();
}

在这里插入图片描述

#include "STC15F2K60S2.H"
#include "sys.H"
#include "displayer.H"            
#include "key.H" 

code unsigned long SysClock=11059200L; 

#ifdef _displayer_H_                          //显示模块选用时必须。(数码管显示译码表,用戶可修改、增加等) 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};   
	              /* 序号:   0   1    2	   3    4   5    6	  7   8	   9	 10	   11	12   13  14   15     */
                  /* 显示:   0   1    2    3    4   5    6    7   8    9     10    11   -     #   H    L     */  
#endif
char a=10;
void myKey_callback()
{ char k;
	k=GetKeyAct(enumKey1);
	if( k == enumKeyPress ) a=14;
	  else if( k == enumKeyRelease ) a=10;
}

void my10mS_callback(){
Seg7Print(10,10,10,10,10,10,10,a);}
void main(){
	DisplayerInit();   
	Key_Init(); 
	SetDisplayerArea(0,7);
	//if(GetKeyAct(enumKey1)==enumKeyPress)
	
	 LedPrint(0);
	SetEventCallBack(enumEventSys10mS, my10mS_callback);
	SetEventCallBack(enumEventKey, myKey_callback);
	MySTC_Init();
	while(1)
		MySTC_OS();
}

在这里插入图片描述

#include "STC15F2K60S2.H"
#include "sys.H"
#include "beep.H"   
#include "Vib.h"

code unsigned long SysClock=11059200L;


void mysv_callback()
{
	if(GetVibAct()==enumVibQuake)
		SetBeep(1200,100);
}


void main(){
	BeepInit();
	VibInit();
	
	SetEventCallBack(enumEventVib, mysv_callback);
	MySTC_Init();
	while(1)
		MySTC_OS();
}



在这里插入图片描述

#include "STC15F2K60S2.H"
#include "sys.H"
#include "hall.H" 
#include "displayer.H" 

code unsigned long SysClock=11059200L;
#ifdef _displayer_H_                          //显示模块选用时必须。(数码管显示译码表,用戶可修改、增加等) 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};   
	              /* 序号:   0   1    2	   3    4   5    6	  7   8	   9	 10	   11	12   13  14   15     */
                  /* 显示:   0   1    2    3    4   5    6    7   8    9     10    11   -     #   H    L     */  
#endif

unsigned char ch=0x01;
char flag=0;
void my100mS_callback(){
	if(flag){
		if(ch<16) {
		LedPrint(ch);
		ch=ch<<1;	
		}
		else
		ch=0x01;
	}
}
void myhall(){
	if(GetHallAct()==enumHallGetClose)
		flag=1;
		else 
			flag=0;
		
}

void main(){
	DisplayerInit();  
	HallInit(); 
	SetDisplayerArea(0,7);
	Seg7Print(10,10,10,10,10,10,10,10);
	LedPrint(0);
	SetEventCallBack(enumEventSys100mS, my100mS_callback);
	SetEventCallBack(enumEventHall, myhall);
	MySTC_Init();
	while(1)
		MySTC_OS();
}

在这里插入图片描述

#include "STC15F2K60S2.H"
#include "sys.H"
#include "adc.h"   
#include "displayer.H"
#include "key.H"

code unsigned long SysClock=11059200L;

#ifdef _displayer_H_                         		 //显示模块选用时必须。(数码管显示译码表,用戶可修改、增加等) 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};   
	              /* 序号:   0   1    2	   3    4   5    6	  7   8	   9	 10	   11	12   13  14   15     */
                  /* 显示:   0   1    2    3    4   5    6    7   8    9     10    11   -     #   H    L     */  
#endif

unsigned char temp[]={0xc0,0x60,0x30,0x18,0x0c,0x06,0x03};  //用来保存灯的7种状态
int i=3;
void mydh_callback()
{
	if(GetAdcNavAct(enumAdcNavKeyLeft)==enumKeyPress)
	{
		if(i>0)
			i--;
	}
	else if(GetAdcNavAct(enumAdcNavKeyRight)==enumKeyPress)
	{
		if(i<6)
			i++;
	}
	LedPrint(temp[i]);
}


void main(){
	DisplayerInit();
	Key_Init();
	AdcInit(ADCexpEXT);
	SetDisplayerArea(0,7);
	LedPrint(temp[3]);
	Seg7Print(10,10,10,10,10,10,10,10);		//数码管什么也不显示
	SetEventCallBack(enumEventXADC, mydh_callback);
	MySTC_Init();
	while(1)
		MySTC_OS();
}


在这里插入图片描述

#include "STC15F2K60S2.H"
#include "sys.H"
#include "displayer.H"  

code unsigned long SysClock=11059200L;
#ifdef _displayer_H_                          //显示模块选用时必须。(数码管显示译码表,用戶可修改、增加等) 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};   
	              /* 序号:   0   1    2	   3    4   5    6	  7   8	   9	 10	   11	12   13  14   15     */
                  /* 显示:   0   1    2    3    4   5    6    7   8    9     10    11   -     #   H    L     */  
#endif
long ms=0,min=0,sec=0,temp=0;
char oput[8]={0};

void fun(){
	temp++;
	ms=temp;
	sec=(temp/1000)%60000;
	min=temp/60000;
	if(sec>59)
	sec=sec-60;
	oput[0]=ms%10;
	oput[1]=(ms/10)%10;
	oput[2]=(ms/100)%10;
	oput[3]=12;
	oput[4]=sec%10;
	oput[5]=(sec/10)%10;
	oput[6]=12;
	oput[7]=min;
	Seg7Print(oput[7],oput[6],oput[5],oput[4],oput[3],oput[2],oput[1],oput[0]);
}

int main(){
	DisplayerInit(); 	
	SetDisplayerArea(0,7);
	Seg7Print(1,1,1,1,1,1,1,1);
	LedPrint(0);
	SetEventCallBack(enumEventSys1mS, fun);
	MySTC_Init();
	while(1)
		MySTC_OS();
}

在这里插入图片描述

#include "STC15F2K60S2.H"
#include "sys.H"
#include "adc.h"
#include "beep.h"
code unsigned long SysClock=11059200L;

void Rop_callback(){
	if(GetADC().Rop<20)
		SetBeep(1200,150);
	else if(GetADC().Rop>100)
		SetBeep(2000,150);
}

int main(){
	BeepInit();
	AdcInit(); 
	SetEventCallBack(enumEventXADC, Rop_callback);
MySTC_Init();
while(1)
MySTC_OS();	
}

后记

本人测试问题不大,仅供参考,如果代码出错欢迎评论区交流

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:01:01  更:2022-07-03 11:01:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 7:49:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计