来源:蜘蛛抓取(WebSpider)
时间:2018-07-02 04:40
标签:
stm32单片机教程
我们用C语言写单片机,可是你真的懂C语言么 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
我们用C语言写单片机,可是你真的懂C语言么
助理工程师
15:07:26
一、static在C语言里面可以用来修饰变量,也可以用来修饰函数。1、 先看用来修饰变量的时候。变量在C语言里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不是堆,不要弄混。例如:在file.c中int main(){int *c = (int *)malloc(sizeof(int));}a是全局变量,b是栈变量,c是堆变量。2、static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量。有的程序是由许多.c文件构成。彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。3、static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就结束了。但加入static修饰之后,变量已经不再存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了上一次被调用后留下的值。4、static对函数的修饰与对全局变量的修饰相似,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。例如:文件a.c //只在a文件中用 //在工程里用static void init() //只在a文件中用{}void callme() //在工程中用{}上面的全局变量i和init()函数只能用在a.c文件中,全局变量sum的作用域只在callme()函数里。变量j和函数callme()的作用域扩充到整个工程文件。所以可以在下面的b.c中用extern关键字调用。extern告诉编译器这个变量或者函数在其他文件里已经被定义了。文件b.c //调用a文件里的extern void callme(); //调用a文件里的int main(){...}而且static会有下面的几个特点:1、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;2、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;三、局部变量和全局变量从作用域角度将变量分为局部变量和全局变量。它们采取的存储类别如下:局部变量:①自动变量,即动态局部变量(离开函数,值就消失)。②静态局部变量(离开函数,值仍保留)。③寄存器变量(离开函数,值就消失)。④形式参数可以定义为自动变量或寄存器变量。全局变量:①静态全局变量(只限本程序文件使用)。②全局变量(即非静态的全局变量,允许其它程序文件引用)。从变量存在时间可将变量存储分为动态存储和静态存储。静态存储是在整个程序运行时都存在,而动态存储则是在调用函数时临时分配存储单元。动态存储:①自动变量(函数内有效)。②寄存器变量(函数内有效)。③形式参数。静态存储:①静态局部变量(函数内有效)。②静态全局变量(本程序文件内有效)。③全局变量(整个程序可引用)。从变量存放的位置可将变量存储区分为静态存储区和动态存储区:静态存储区:①静态局部变量。②静态全局变量。③全局变量(可被同一程序其它文件引用)。动态存储区:自动变量和形式参数。CPU寄存器:寄存器变量。当然,本文讨论的对于变量的内存存储分配只是一部分,在C语言中依然会有其他的存储方式和类型的存在。
22:55:48
楼主还有没有啊
助理工程师
17:06:57
楼主还有没有啊
你想要什么,我这边都有啊
22:08:18
可以可以,谢谢,,
10:46:31
谢谢,分享
15:59:36
多谢楼主分享!
工程师职场
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司查看: 399|回复: 3
如果用C语言来写的STM32程序,主要用到了那部分的知识 求大佬指教
如果用C语言来写的STM32程序,主要用到了那部分的知识
c语言部分,全部用到了,建议将唐浩强的c语言好好学习 ,而且建议先将51单片机学学,整体思路和流程
指针,结构体,宏定义,if,while还有位运算(左右移,与或非等)
主要是结构体
Powered bySTM32单片机LCD显示接口编程 及其应用_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STM32单片机LCD显示接口编程 及其应用
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩14页未读,
定制HR最喜欢的简历
你可能喜欢求知、游玩、工作、讨论、分享是畅游虚拟的最大乐趣
单片机读入4*4矩阵键盘
一、什么是矩阵键盘
矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4*4和8*8,其中用的最多的是4*4。
网上搜了两张实物图,大家可以看看
看上图就知道,4*4键盘还是很多地方用到的吧^_^
二、矩阵键盘的原理
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具
有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以
得出按键的坐标从而判断按键键值。
原理如同矩阵数列的行列式
三、驱动电路图
按4*4矩阵搭建的按键矩阵还是比较简单的,也有的人为了保证电路的稳定性,加上二极管保护和上拉电阻,但是一般要求不太高的电路就不需要加了,向下面设置的电路那样就可以
四、软件程序设计
根据4*4键盘的原理软件设计程序如下:
//***************************************************
//函数功能:
//单片机驱动4*4键盘,读入键盘值并使用数码管静态
//显示按键键值,若没有数码管用8421码显示LED灯也可以的
//读入原理:先令单片机端口输出读一次,然后
//再令单片机输出读一次把两次的值相加,最后
//获取一个高位和低位分别有0的值即可判断键值,
//***************************************************
#include®52.h&
#define uchar unsigned char
#define uint unsigned int
unsigned char code smg_d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//************************************************
//延时函数,在12MHz的晶振频率下
//大约50us的延时
//************************************************
void delay_50us(uint t)
for(;t&0;t--)
for(j=19;j&0;j--);
void main()
uchar key_l,key_h;
//读P1端口的值
key_l=key_l&0xf0;
//令低4位置位为0
if(key_l!=0xf0)
//判断是否有按键按下
delay_50us(100);
if(key_l!=0xf0)
//若有按键按下,则切换高低4位判断键值
key_l=P1&0xf0;
// 获取第一次键值
key_l=key_l|0x0f;//
//反过来再读一次,由于人手按下按键的时间虽然短暂,但是
//对于单片机来说,已经足够长,因此可以正反读取两次值
key_h=key_h&0x0f;//
key_l=key_l&0xf0;//
key=key_h+key_l; //
switch (key)
case 0xee:P2=smg_d[0];
case 0xde:P2=smg_d[1];
case 0xbe:P2=smg_d[2];
case 0x7e:P2=smg_d[3];
case 0xed:P2=smg_d[4];
case 0xdd:P2=smg_d[5];
case 0xbd:P2=smg_d[6];
case 0x7d:P2=smg_d[7];
case 0xeb:P2=smg_d[8];
case 0xdb:P2=smg_d[9];
case 0xbb:P2=smg_d[10];
case 0x7b:P2=smg_d[11];
case 0xe7:P2=smg_d[12];
case 0xd7:P2=smg_d[13];
case 0xb7:P2=smg_d[14];
case 0x77:P2=smg_d[15];
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!【资料】单片机 C 语言模块化编程 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 1325|回复: 22
【资料】单片机 C 语言模块化编程
在线时间236 小时
ST金币2617
该用户从未签到主题帖子精华
金牌会员, 积分 4611, 距离下一级还需 389 积分
下面让我们揭开模块化神秘面纱,一窥其真面目。
C 语言源文件 *.c
提到 C 语言源文件,大家都不会陌生。因为我们平常写的程序代码几乎都在这个 XX.C 文件里面。编译
器也是以此文件来进行编译并生成相应的目标文件。作为模块化编程的组成基础,我们所要实现的所有功能的源
代码均在这个文件里。理想的模块化应该可以看成是一个黑盒子。即我们只关心模块提供的功能,而不管模块内
部的实现细节。好比我们买了一部手机,我们只需要会用手机提供的功能即可,不需要知晓它是如何把短信发出
去的,如何响应我们按键的输入,这些过程对我们用户而言,就是是一个黑盒子。
(1.29 MB, 下载次数: 190)
08:23 上传
点击文件名下载附件
下载积分: ST金币 -1
ST金币 +10
            
      
在线时间43 小时
ST金币1339
该用户从未签到主题帖子精华
高级会员, 积分 740, 距离下一级还需 260 积分
谢谢&&分享!!!!!
在线时间2233 小时
ST金币985665
TA的每日心情开心 09:20签到天数: 1 天[LV.1]初来乍到主题帖子精华
            
      
在线时间442 小时
ST金币2649
该用户从未签到主题帖子精华
感谢楼主分享
在线时间722 小时
ST金币1194
该用户从未签到主题帖子精华
            
      
在线时间40 小时
ST金币1283
该用户从未签到主题帖子精华
高级会员, 积分 578, 距离下一级还需 422 积分
在线时间89 小时
该用户从未签到主题帖子精华
金牌会员, 积分 1500, 距离下一级还需 3500 积分
            
      
在线时间9 小时
该用户从未签到主题帖子精华
初级会员, 积分 140, 距离下一级还需 60 积分
QQ图片47.jpg (1.94 KB, 下载次数: 0)
10:59 上传
在线时间268 小时
ST金币3019
该用户从未签到主题帖子精华
金牌会员, 积分 4671, 距离下一级还需 329 积分
感谢楼主分享
            
      
在线时间13 小时
该用户从未签到主题帖子精华
初级会员, 积分 175, 距离下一级还需 25 积分
QQ截图03.png (24.66 KB, 下载次数: 0)
16:35 上传
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by