#include< reg51.h>
#define uint unsigned int
#define uchar unsigned char
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
uchar count;
uchar i;
uchar code leddata[]={0xC0, //"0"0xF9, //"1"0xA4, //"2"0xB0, //"3"0x99, //"4"0x92, //"5"0x82, //"6"0xF8, //"7"0x80, //"8"0x90, //"9"0x88, //"A"0x83, //"B"0xC6, //"C"0xA1, //"D"0x86, //"E"0x8E, //"F"0x89, //"H"0xC7, //"L...
做公司的一个项目,实现一个功能就是 机器在进行一项功能时(这项工作时间挺长),想要取消这项工作,重新选择。想了半天没想出来,结果同事提醒了一句,可以在程序中加一个外部中断,在中断中软件复位程序。用到以下两句话__set_FAULTMASK(1); // 关闭所有中断 NVIC_SystemReset(); // 复位在中断最后执行这两句话就系统复位了。但是在运行过程中出现了一下两个问题:①发现我的程序死在复位函数中了 如下static __INLINE ...
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC>_<:i2c.c 1/*-----------------------------------------------2名称:IIC协议 3内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器4周期,即晶振频率要小于12MHZ)5------------------------------------------------*/ 6 #include "i2c.h" 7#define _Nop() _nop_() //定义空指令 8 bit ac...
———————————————————————————————————————————— 开发板:畅学51单片机学习板 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -使用元件: STC51单片机芯片 51单片机核心板 LCD1602 矩阵键盘 11.0592MHz晶振 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -...
#include< reg51.h>
#define uint unsigned int
#define uchar unsigned char
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
uchar count;
uchar i,j,num;
uchar code leddata[]={0xC0, //"0"0xF9, //"1"0xA4, //"2"0xB0, //"3"0x99, //"4"0x92, //"5"0x82, //"6"0xF8, //"7"0x80, //"8"0x90, //"9"0x88, //"A"0x83, //"B"0xC6, //"C"0xA1, //"D"0x86, //"E"0x8E, //"F"0x89, //"H"0xC7,...
51单片机作业,自己网上查资料,看课本,弄了一个下午加一个晚上,这个专业真的太苦逼!
需要的小伙伴看看吧
要求:现有AT89S51单片机、2按键和2位数码管,电路形式不限制,利用Proteus设计一电路并完成仿真调试,实现如下功能:上电后数码管显示00,按K1键,数码管每秒自动加1顺序显示00~99,中途再次按K1键则暂停计数;按K2键则显示00并停止计数。
keil程序:
#include<reg52.h>
sbit led0 = P0^0;
sbit led1 = P0^1;
typedef...
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" width="100%"></iframe>
说明
1.这节远程升级以STM32F407VET6+ESP8266为例.
一会再补充上使用STM32F407VET6+Air202/Air302的程序.
...
1/stc单片机下载程序的原理
首先我们要理解stc单片机下载程序的原理。在stc单片机中有两个程序区:用户程序区和ISP监控程序区。
这是stc89c52单片机数据手册中的内容。根据数据手册,我们可以知道,当冷启动或者对ISP_CONTR寄存器送入60H产生复位以后,单片机会从ISP监控程序区开始执行程序。
如果这时候检测到合法的ISP下载命令流(后面会说什么是ISP的合法下载流),则ISP监控程序开始与ISP下载软件通信(如stc-isp),软件也会进...
项目要求两种不同的电路板由于某一个IC程序烧录版本不一致,需区分这两种电路板。
两种电路板外观完全一致,通过示波器读出只有第一次出现的波形群波形个数有区别。实现思路在第一次波形群出现的时间内对波形计数。
通过外部中断下降沿触发计数功能。在下降沿触发的中断函数里对变量count做自加一处理。
第一次进入外部中断即开启定时中断,这里通过count值是否为1来实现第一次进外部中断才开启定时中断开关。
一旦进入定时中断函数...
<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnif.cn/单片机知识点总结/directory.html" width="100%"></iframe>
前言上一节使用的是环形队列实现的数据缓存这节使用内存管理实现内存管理使用的是 μC/OS-II 里面的内存管理程序
使用说明(第一种)一,内存管理意味着有许多的内存块然后每个内存块有固定的长度内存块的长度假设定义的足够大,可以放入每条数据
百度百科文章
ISP
电子发烧友文章
基于单片机ISP技术原理及在线编程器的实现
单片机三种烧录方式ISP、IAP和ICP的区别详解
CSDN博客文章
单片机ISP、IAP、ICP烧写方式的概念与区别
最后,我想推荐一下我的公众号,公号现在还没有内容,以后会慢慢的添加的,博客也会同步更新到公众号的。其实我是有私心的,就是想练一练写作能力,也希望关注我的读者也能和我一起成长。
在单片机或嵌入式系统的程序,常常用规定次数的空循环来实现延时
/**
*?通过一个空循环体循环让程序运行一段时间。在嵌入式系统中,这个函数用来实现延时。
*
*?参数:
*????u16?i?--?循环次数,无符号整型
*?返回值:
*????无
**/
void?delay(u16?i)
{
??while(i--);
}
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLAir724UGA/myota.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/ZLAir724UGA/myota.html" width="100%"></iframe>
说明
这节测试下STM32F407+Air724UG实现利用http或https远程更新单片机程序
整个的升级...
1.用C51单片机实现花样流水灯,代码如下:
#include <reg52.h> #define LED_A P1 //led灯所用的接口,是哪个口就写P几void delayms(){ unsigned char x = 0; unsigned char i; unsigned char y = 0; while(y < 0.001) //定义led灯的切换的延时时间,越小越快。 { //(y < 0.001);(x<100);(i<100)都可以修改 x = 0; ...
文章目录
一、倒计数的实现二、停表的实现一、倒计数的实现
1、原理分析 倒计数的段选信号需要由一个数组存放起来:
code uchar table[]={0x6F, 0x7F, 0x07, 0x7D, 0x6D, 0x66, 0x4F, 0x5B, 0x06, 0x3F}; 然后需要用到定时器中断来实现数值的计算,所以要先初始化定时器,此处只用了一个定时器中断0;其实也可以由两个定时器中断来实现,只是需要两个中断服务函数来做,也就是一个典型的计数器。 初始化定时中断0:
void Init()
{T...