单片机
文章平均质量分 51
岛上码农
Flutter爱好者,上架过百万级用户App(App Store分类排名前30),搞过后端开发。
展开
-
矩阵键盘扫描
矩阵键盘扫描一般采取行列扫描法。比如先拉低所有列线,拉高行线,之后读取行线状态,如果行线有一行为低,则假设有按键按下,此时再延时20毫秒左右后判断行线的某一行是否仍然为低,若为低则确认有键按下。这时可以进行按键键值判断,即判别在哪一行哪一列有按键按下。判断的方法是通过拉高列线,依次置行线的某一行为低,读取列线值。如果列线有一列为低,则表示按键发生在该行,进而可以通过读取到的列线值确定在哪一原创 2009-08-24 13:38:00 · 756 阅读 · 0 评论 -
第十一讲——数码管扫描知识
数码管扫描的基本思想是在间隔比较短的时间内让数码管一个个循环点亮,由于视觉暂留效应,使得看起来好像所有的数码管同时亮一样。具体代码如下:#include#define T0_INTERRUPT 1 //T0中断向量号//共阳极数码管7段码unsigned char seg[] = {0x3F,0x06}; //简化只显示0和1unsigned char Seg原创 2010-01-21 09:38:00 · 255 阅读 · 0 评论 -
第九讲——总线应用(DAC0832)
总线具有很多优势,例如可以挂很多外围的器件,比如DAC,ADC等等芯片。另外一个优点就是很多外围器件就是为单片机总线结构设计的,比如8279这样的键盘,数码管驱动芯片。总线操作简单,或者说很简单——再简单不过了。下面以DAC0832为例讲述总线的基本操作方式,代码如下:#include#include //用于XBYTE,外围器件寻址#define DAC08原创 2010-01-21 09:37:00 · 302 阅读 · 0 评论 -
第九讲——串口接收与放送
为了降低CPU负担,一般串口接收都采用中断方式进行。可以设置一个接收缓冲区,将接收到的字符串存入,达到一定长度时再读出整段信息,以判断接收的数据,这种方式一般用于串口发送控制命令或数据的形式。这里我们只给出了接收单个字符并接收后立即发送出去的程序作为演示。代码如下:#include#define UART_INTERRUPT 4void serial_ini原创 2010-01-21 09:35:00 · 213 阅读 · 0 评论 -
第六讲——外部中断
51系列单片机提供了两个外部中断输入端口,/INT0和/INT1,分别对应P3.2和P3.3。中断方式可以选择电平中断方式或是边沿中断方式。只需在/INT0或者/INT1输入满足中断条件的逻辑信号即可实现中断。下面的代码给出了如何处理中断,通过外部1Hz的时钟输入实现了LED的闪烁。#include#define INTERRUPT_EXTERNAL_0 0 //外部中断0原创 2010-01-21 09:30:00 · 257 阅读 · 0 评论 -
第七讲:串行通讯——使用printf函数
对于没有仿真器的板子来说,串口是一个非常好的调试工具,你可以将你需要观察的变量通过串口发送到PC上进行后续分析,进行调试。程序代码如下:#include#includevoid serial_init(void);void main(){ serial_init(); while(1) { printf("Hell原创 2010-01-21 09:32:00 · 316 阅读 · 0 评论 -
第五讲——定时器中断
定时中断和定时器延时差不多,所不同的就是开启了定时器中断功能,当定时器溢出标志TFx(x=0,1,2)置位时触发中断,单片机进入中断服务子程序,执行中断服务子程序功能。定时器中断的好处就是单片机在定时器计时时可以做其他的事情,可以增强单片机运行效率。如果只在单片机定时中断中完成所有任务,那么单片机可以设置进入休眠模式,以节省功耗。这里给出的代码是通过定时器中断实现P1口LED隔1秒闪烁原创 2010-01-21 09:29:00 · 651 阅读 · 0 评论 -
第二讲:IO操作——LED
开始我们的第二讲,老生长谈的话题:点灯。这里我们采用延时的方法实现LED闪烁。LED闪烁的基本原理就是通过IO口的电平高低变化实现LED的开和关,通过一定的延时(延时时间至少大于100ms,否则人眼反应不过来),得到LED闪烁的结果。代码如下:#include#define LED P1//sbit LED0 = P1^0;typedef unsigned原创 2010-01-21 09:25:00 · 254 阅读 · 0 评论 -
第十四讲——使用74HC595进行输出口扩展
74HC595是三线串转并芯片,同时提供了级联端,可以进行多片级联,因此非常适合进行单片机输出端口扩展。同时74HC595还可以使用SPI接口驱动。这里采用级联的方式使用74HC595驱动两个数码管显示。按照595时序,使用51单片机来将16位7段码数据送入595驱动数码管显示。程序如下:主程序:main.c#include"Main.h"uchar code原创 2010-01-21 09:43:00 · 954 阅读 · 0 评论 -
第十二讲——键盘扫描知识
矩阵键盘扫描一般采取行列扫描法。比如先拉低所有列线,拉高行线,之后读取行线状态,如果行线有一行为低,则假设有按键按下,此时再延时20毫秒左右后判断行线的某一行是否仍然为低,若为低则确认有键按下。这时可以进行按键键值判断,即判别在哪一行哪一列有按键按下。判断的方法是通过拉高列线,依次置行线的某一行为低,读取列线值。如果列线有一列为低,则表示按键发生在该行,进而可以通过读取到的列线值确定在哪一原创 2010-01-21 09:40:00 · 328 阅读 · 0 评论 -
第四讲——定时器实现延时
对于AT89S52单片机,共有3个定时器,T0,T1,T2。其中T0,T1可以作为16位计数器,16位定时器和8位自动装载定时器使用,而T2则可以作为16为自动装载 定时器。这里以T0为例,讲述16位定时器实现延时的代码。定时器的相关寄存器不在这里叙述,大家可以根据程序查阅手册看看各个寄存器的使用。鼓励大家自己也进行思考,查阅资料。代码如下,这里采用定时器实现1ms延时,延后以循环原创 2010-01-21 09:28:00 · 1304 阅读 · 0 评论 -
第三讲:IO操作——简单流水灯
流水灯其实就是一系列的灯一次点亮的过程,看起来像流动的一样。程序实现起来就是左移或者右移的过程,如果复杂的话则需要进行逻辑判断,例如使用switch分支来实现多个花样的流水灯。这里只给一个简单的流水灯示例,有兴趣的朋友可以回去自己修改移位方式或逻辑方式进行改进。代码如下:#include#define LED P1//sbit LED0 = P1^0;t原创 2010-01-21 09:27:00 · 651 阅读 · 0 评论 -
第八讲:串行通讯——使用查询方式发送数据
使用Printf函数虽然简单,但是效率低下,因此在实际中我们需要自己编写代码实现Printf函数的功能。最简单的方式就是采用查询的方式实现数据的发送。查询的方式就是将要发送的一个字符送入发送缓冲区,在这个字符为发送完之前,等待发送完成,直到发送完成之后才接着发送下一个字符。代码如下:#includevoid serial_init(void);char *p原创 2010-01-21 09:35:00 · 568 阅读 · 0 评论 -
自己写的C51入门教程——第一讲:IO基础知识
AT89S52单片机与普通的8051单片机管脚兼容,共有40个管脚,其中IO管脚共32个, Vm�yMR%vT3 分别为P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。 Me#P>K~&u (b8xDsy 其中P0内部没有上拉,所以如果P0需要输出高电平的话必须在外部加上拉电阻。需要 L7ce_$ J 注意的是,原创 2010-01-21 09:22:00 · 327 阅读 · 0 评论 -
通过单片机定时器产生PWM波
PWM(脉宽调制)在很多场合都用得上,例如LED亮度控制,开关电源输出电圧控制等。 c~dX8+ 这里采用简单的定时器实现PWM波输出,通过更改定时器定时参数,控制IO口输出 ;H2O 波形高低电平持续时间,实现PWM波。 QnVVu2xWtA Q=d1Wz� 代码如下: 01cnC/DjV qv�n;i~原创 2009-08-24 13:40:00 · 1018 阅读 · 0 评论 -
自己写的C51单片机教程PDF下载
哈哈,发现居然有人已经上传到CSDN下载频道了,分享下链接,PDF文档排版更好一些,另外附有仿真结果图例。http://download.csdn.net/source/992826原创 2010-01-21 09:56:00 · 264 阅读 · 0 评论