单片机c语言入门如何用c语言编写基于STM32芯片的4*4

我们用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&reg52.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
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间43 小时
ST金币1339
该用户从未签到主题帖子精华
高级会员, 积分 740, 距离下一级还需 260 积分
谢谢&&分享!!!!!
在线时间2233 小时
ST金币985665
TA的每日心情开心 09:20签到天数: 1 天[LV.1]初来乍到主题帖子精华
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间442 小时
ST金币2649
该用户从未签到主题帖子精华
感谢楼主分享
在线时间722 小时
ST金币1194
该用户从未签到主题帖子精华
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间40 小时
ST金币1283
该用户从未签到主题帖子精华
高级会员, 积分 578, 距离下一级还需 422 积分
在线时间89 小时
该用户从未签到主题帖子精华
金牌会员, 积分 1500, 距离下一级还需 3500 积分
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间9 小时
该用户从未签到主题帖子精华
初级会员, 积分 140, 距离下一级还需 60 积分
QQ图片47.jpg (1.94 KB, 下载次数: 0)
10:59 上传
在线时间268 小时
ST金币3019
该用户从未签到主题帖子精华
金牌会员, 积分 4671, 距离下一级还需 329 积分
感谢楼主分享
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间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

我要回帖

更多关于 stm32单片机教程 的文章

 

随机推荐