单片机怎么用_单片机怎么用crol - CSDN
  • 单片机按键使用程序 (51单片机

    千次阅读 2020-08-03 23:27:01
    单片机独立按键使用程序 (51单片机) 独立按键是单片机中很重要的一个器件,在这篇文章里,通过这个独立按键控制LED灯的小程序来介绍独立按键开关的使用。 ...

    单片机独立按键使用程序 (51单片机)

    独立按键是单片机中很重要的一个器件,在这篇文章里,通过这个用独立按键控制LED灯的小程序来介绍独立按键开关的使用。

    #include<reg52.h>
    typedef unsigned int u16;
    typedef unsigned char u8;
    sbit key=P3^1; 
    sbit led=P2^0;  
    
    void delay(u16 num)//延时函数
    {
     u16 x,y;
     for(x=num;x>0;x--)
      for(y=110;y>0;y--)
     {
      ;
     }
    }
    void main(void)
    {
     led=1;
     while(1)
    {
     if(key==0)
     {
      
      delay(10);//消抖程序
      if(key==0)
      {
      led=~led;//取反
      }
      while(!key);//使灯在开关下一次按下之前不发生变化,不跳出大循环
     }
    }
    }
    

    两次按下按键的结果图
    1

    在这里插入图片描述

    运行视频
    在这里插入图片描述
    关注公众号,了解更多。

    在这里插入图片描述

    展开全文
  • 51单片机用定时器0实现流水灯

    万次阅读 2016-05-13 21:09:09
    51单片机用定时器0实现流水灯的代码如下,用P1口接led灯,代码如下都有注释就不具体解释了,英语不怎么好,有的地方将就一下了,本次主要讲一下P1口怎么赋值的。原先写的都是用查表来移位的,个人感觉不怎么好,麻烦...

    51单片机用定时器0实现流水灯的代码如下,用P1口接led灯,代码如下都有注释就不具体解释了,英语不怎么好,有的地方将就一下喽,本次主要讲一下P1口怎么赋值。原先写的都是用查表来移位的,个人感觉不怎么好,麻烦。直接用位运算的比较好。 n初始值为0,然后n每次循环都加1,P1口赋值语句为: P1=~(0x01<< n) ; 此处注意和P1=~(0xfe<< n) ; 的区别。

    /*********调用头文件*****************/
        #include<reg51.h>
        #include<intrins.h>
    
        /***********宏定义*******************/
        #define uint unsigned int   
        #define uchar unsigned char 
        #define long_time0 10    //定时器0定时时间,每次50ms
    
        /************定义全局变量************/
        uint n=0;                //循环移位变量
    
        /************子函数声明**************/
        void init_time0(void);   //定时器0初始化子函数
    
        /*************主函数*****************/
        void main(void)
        {
            init_time0();
    
        }
    
        /*********定时器0初始化函数**********/
        void init_time0(void)
        {
                EA=1;                   //开总中断
                ET0=1;                  //开定时器0中断
                TMOD=0X01;              //选择方式1
                TH0=(65536-50000)/256;  //每次定时50秒
                TL0=(65526-50000)%256;
                TR0=1;                  //开启定时器
                while(1);               //等待定时器0中断
        }
        /************定时器中断函数**********/
        void time0(void) interrupt 1 using 0
        {
            static uint i=0;
            i++;
            if(long_time0==i)
            {
                P1=~(0x01<<n);          //P1=~(0xfe<<n);
                if(++n==8)n=0;
                i=0;                    //定时时间到清零
            }
            TH0=(65536-50000)/256;      //重新装入初值
            TL0=(65526-50000)%256;
        }
    展开全文
  • STC15单片机使用AT命令的C语言编程

    千次阅读 2019-02-02 10:47:28
    STC15单片机使用SIM800C 编程系统配置系统功能实现与SIM800C之间的交互AT命令的发送与读取AT+CSQ发送命令和读取命令总结 系统配置 采用一个 IAP15W4K58S4,也就是一个STC15W4K58S4的单片机和SIM800C进行连接。使用一...

    系统配置

    采用一个 IAP15W4K58S4,也就是一个STC15W4K58S4的单片机和SIM800C进行连接。使用一个上网卡,实现物联网操作。硬件连接非常简单,可以非常容易的实现,测试也非常简单,将单片机设置2个串口,一个串口做调试用,另一个串口是和SIM800C进行连接。这里有一个比较奇怪的现象,我在单片机中设置的波特率是9600,一般速率会减半,所以在单片机中将与SIM800C实现串口通讯的波特率设置为19200,这样就可以实现通讯了。

    系统功能实现

    要实现一些简单的计算机指令还是需要费一些周折的,要使用诸如printf命令和scanf命令都要费一些功夫。STC15系列的软件还是不如NANO等Arduino计算机开发的抽象化,还是比较底层就可以开发应用的。在这里说一下要使用printf的话,要在程序中修改putchar这个函数,修改的方法如下:

    void putchar(char c){
        ES = 0;
        SBUF = c;
    while(TI==0);
        TI = 0;
        ES = 1;
    }

    在程序中将原来的库函数中的putchar去除就可以正常的使用printf的函数了。

    与SIM800C之间的交互

    系统上电启动后,首先我们是要给SIM800C发送一个AT命令,来测试SIM800C是否是激活的。当激活时,SIM800C会返回一个OK的命令。再就是要发送一个AT+CSQ命令,让SIM800检测网络信号是否正常。发送了命令后,要对返回的命令进行读取和分析。

    AT命令的发送与读取

    发送指令就是一般的向串口发送字符串指令:

    if (cStep == 0)
    {
       	cStep = 1;    		// Initialize Step: AT
    PrintString2("AT\r");
    printf("The Step number = %d\r\n", cStep);
       	iSendFlag = 1;
    }

    当SIM800C得到AT命令,如果回显设置的是ATE1,则回显AT,如果正常,就返回OK,如果不正常或者是没有连接,返回为空。对返回值的检测要注意一般会采用strstr函数来得到分字符串,返回的例程如下:

    printf("%s", hubSIMChar);
         desstr = strstr(hubSIMChar, "OK");
    if (strncmp(desstr, "OK", 2) == 0)
    {
    printf("SIM800C is OK\r\n");
          cStep += 1;
    }

    再这里的字符串比较用到了strncmp函数。如果直接用strcmp函数就不能正常的运行。而且要注意,相等的条件是strncmp的结果是0表明两个分字符串相等。

    AT+CSQ发送命令和读取命令

    当发送AT命令后,返回OK说明SIM800C可以正常工作了,现在发送这个AT+CSQ命令来测试网络连接信号是否正常。

    PrintString2("AT+CSQ\r");
       iSendFlag = 2;
       cStep = 3;

    发送完命令后等待SIM800C来返回。

    printf("%s", hubSIMChar);
         desstr = strstr(hubSIMChar, "+CSQ: ");
    sscanf(desstr, "%s %d,%d", str1, &icsq1,&icsq2);
    printf("The mobile signal is:%d,%d\r\n", icsq1, icsq2);
         iSendFlag = 0;
    if (icsq1 < 10)
    printf("The mobile signal is too low\r\n");

    再计算机上运行结果如下:
    The step number = 3
    AT+CSQ
    +CSQ: 18,5
    OK
    The mobile signal is: 18,5

    总结

    要使用单片机与AT命令打交道,就要熟练的掌握字符串处理,用好字符串的函数非常重要。

    展开全文
  • 51单片机的Printf使用方法

    万次阅读 2015-01-14 14:11:23
    51单片机使用Printf的方法

        今天在群里面有一个网友提到51单片机使用printf为什么编译通过了,但是没有效果 。这里将我的笔记翻出来共享一下,这个实验本身没有太大的意义,主要是记录51单片机应该如何使用Printf函数。


    实验名称:串口通信之单片机和PC计算梯形面积

    MCU型号:STC12C5A60S2(12T模式)

    晶振 :11.0592MHZ

    实验内容:利用单片机和PC机串口通信的工作方式1(波特率可变),(已经晶振为11.0592MHZ)设置波特率为9600B/S,结合定时器1的工作方式2(TH1=0xfd,TL1=0xfd),输入梯形的上底、下底、高,输出梯形面积


    效果图:

    参考程序:

    /*
    	文件名:串口通信值单片机和PC机计算梯形面积.c
    	创建人:杨瑞
    	创建时间:2013年2月20日
    	开发环境:HOT51增强型单片机开发板
    	程序功用:利用单片机与PC机的串口通信,计算梯形面积
    	
    	附:利用单片机和PC机的串口通信的工作方式1(波特率可变),(已知晶振为11.0592MHZ)设置通信波特率为9600b/s,结合定时器1的工作方式2(TH1=0xfd,TL1=0xfd),输入上底、下底、高,输出梯形面积
    	
    	提示:下载程序后,打开串口工具,需要复位一下。
    */
    
    #include<reg52.h>
    #include<stdio.h>
    
    #define uint unsigned int 
    #define uchar unsigned char
    
    void uart(void)					//串口通信初始化
    {
    	SCON=0x40;					//串口通信工作方式1
    	REN=1;						//允许接收
    	TMOD=0x20;					//定时器1的工作方式2
    	TH1=0xfd,TL1=0xfd;		
    	TI=1;                       //这里一定要注意
    	TR1=1;						//打开定时器
    }								
    void main(void)
    {
    	uint up=0,down=0,high=0;
    	uint result ;
    	uart();
    	while(1)
    		{ 	
    			printf("********************************\r\n");
    			printf("Please input up,dowm,high:\r\n");
    			scanf("%d%d%d",&up,&down,&high)	;
    			printf("\r\nResult=%d\r\n",result=(up+down)*high/2);
    		}
    }



    展开全文
  • 单片机和三极管的妙

    万次阅读 2019-05-06 22:40:35
    单片机输出高电平控制LED 三极管基极得加限流电阻的,不然有可能烧单片机 先我们要了解单片机IO口的两种工作状态,灌电流输入与漏电流输出,也就是我们所说的低电平和高电平 8050和8550是配对三极管,8050是NPN...
  • 首先来说,每一款单片机的编程软件都有软件仿真功能。我们可以通过这个软件仿真功能学习一些单片机的功能。  例如,可以通过软件仿真功能实现单片机端口输出高低电平,然后通过观察相应的端口寄存器的值来看程序...
  • 51单片机是市面上比较普及的单片机种类,同时也深受广大电子爱好者的青睐。...将单片机的串口通信通过HC-05进行扩展从而实现无线通信,更可使用手机来控制单片机完成工作。 要完成单片机与Android手机的无...
  • 51单片机 使用蜂鸣器播放简单音乐

    万次阅读 多人点赞 2014-11-05 12:51:44
    MCU型号 STC 89C52RC
  • 单片机是一种可编程控制器,搭好硬件电路后,可以利用程序实现很多非常复杂的逻辑功能,与纯硬件电路相比,简化了...因为不通用的烧写工具可能价格较贵,比如说Micorchip单片机使用的ICD系列编程器,单台价格在60...
  • 最近有同学在51单片机的学习过程中困扰如何使用单片机串口在上位机串口助手上输出显示的问题,其实很多开发环境都支持使用C语言里面最常用的printf函数,Keil中也不例外,不仅仅是C52、keil下其他51系列单片机如STC...
  • 本人在调试STC8A8K64S4单片机时遇到一个很奇葩的问题,使用printf函数打印一个带参数的调试信息时出现异常,具体表现定义了8位的变量使用%X格式打印出的值却变成了16位,且赋值为0后任然打印出16位的随即数值。...
  • 51单片机使用定时器中断模拟PWM控制端口电压

    千次阅读 多人点赞 2018-11-13 20:10:34
    最近应实验室需求写一篇51单片机产生PWM的文章供参考.  单片机芯片STC89C52,晶振12MHz,编译环境Keil5.  分析:若使单片机端口为高电平, 则单片机输出电压为恒值5V. 反之低电平输出电压为0V. 但是我们如果在周期为...
  • 单片机该不该C++?

    2020-08-23 19:29:06
    但目前主流单片机都是C语言写,于是有了这个问题——单片机该不该C++写。 我想,Quora上大佬的回答Why can't C++ replace C in embedded systems? 应该还是可靠的吧。 个人的总结如下,待时间去检验它的正确性...
  • 单片机用AD测量电池电压的值

    万次阅读 2017-07-27 15:28:13
    单片机的引脚最大输入电压一般为3.3V或者5.0V,电流是25ma,40ma 而电池一般有3.3V-36V不等,电流也是好几A,超过5.0的电池一接到单片机 AD口,可能和三星手机一样。所有我们需要从电压电流2方面来入手考虑。 1...
  • Microchip的编译器C30(16位单片机)以及C32(32位单片机)在较新的版本中也开始实现了这个函数,这为对RAM本来有些捉襟见肘的单片机编程添加了不少灵活性。不过在实际使用过程中有几个需要注意的地方(以MPLab v...
  • 51单片机使用槽型光耦测速模块

    千次阅读 2018-12-11 14:15:08
    使用说明 【单片机程序】 【测速模块】 模块资料 我使用的是窄体的槽型光耦测速模块,如下图所示: 接线 1、VCC接电源正极3.3V-5V 2、GND接电源负极 3、D0(TTL开关信号输出)接单片机外部中断 4、A0无效...
  • 关于51单片机外部中断的触发方式

    万次阅读 2016-01-25 11:27:10
    一般来说,外设第一次向单片机申请外部中断时,单片机使用那种触发方式,并无什么差别。但是,返回主程序后,如果外部申请信号仍然是低电平,就有区别了。在采用低电平触发时,单片机执行了一条主程
  • 宏晶STC单片机使用STC-ISP串口烧录失败的解决方法及实例汇总 (Ver0.99.16) 但是大量的实际编程下载时可能遇到各种各样下载失败的问题,影响了用户体验,现整理原因和解决方法如下:
  • pic单片机使用printf函数

    千次阅读 2017-10-24 20:20:19
    mplab 以及 iar 中printf的...1、在MPLAB PIC单片机中,要使用PRINTF,要在自己的工程中加入以下函数 void putch(unsigned char byte) {  /* output one byte */  while(!TXIF) /* set when register is e
  • 单片机上操作系统的好处

    万次阅读 2019-04-02 09:24:27
    自己在上学的时候,搞过2年的单片机STM32编程,当时还记得一心想在上面跑个操作系统,UCOS操作系统,但是当时自己为什么要上这个操作系统,不是特别的清楚,后来自己在实际工作中,做了应用软件,感觉有了一些深刻的...
1 2 3 4 5 ... 20
收藏数 158,549
精华内容 63,419
关键字:

单片机怎么用