编写单片机的基本步骤

22物联网应用技术1班 22物联网应用技术1班 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

        编写单片机

 

 

 

目录

前言

一、单片机的基本概念

二、编写单片机的关键因素

1. 明确任务和需求

2. 选择合适的开发工具

3. 熟悉单片机的指令集和架构

4. 重视程序结构和算法设计

5. 重视测试和调试

三、单片机常用代码大全

1、 位码(共阴):

2、 断码(共阳):

3、 独立管码(共阳):

4、循环函数intrins

5、中段代码

6、IIC总线

7、时钟调试键盘扫描

 

 

 

 

前言

 

在科技快速发展的时代,单片机作为自动化设备和智能电子产品的重要组成部分,得到了广泛应用。本文将探讨编写单片机的关键因素和策略,帮助读者更好地理解和应用单片机技术。

 

一、单片机的基本概念

 

单片机是一种集成电路芯片,集成了中央处理器、随机存取存储器、只读存储器、输入/输出接口等必要电子元件,广泛应用于各个领域。在单片机中,程序控制着整个系统的运行,因此编写高质量的程序对于单片机的应用至关重要。

 

二、编写单片机的关键因素

 

1. 明确任务和需求

在编写单片机程序之前,需要明确任务和需求,包括实现的功能、输入/输出接口、通信协议等。只有明确了任务和需求,才能有针对性地编写程序。

 

2. 选择合适的开发工具

选择合适的开发工具可以提高编程效率和代码质量。常用的单片机开发工具有Keil、IAR Embedded Workbench等。这些开发工具提供了丰富的库函数和调试工具,方便开发者进行程序编写和调试。

 

3. 熟悉单片机的指令集和架构

单片机的指令集和架构是编写程序的基础。开发者需要熟悉单片机的指令集,了解各种指令的功能和使用方法。同时,还需要了解单片机的架构,包括中央处理器、存储器、输入/输出接口等,以便更好地进行程序设计和优化。

 

4. 重视程序结构和算法设计

程序结构和算法设计是编写高质量程序的关键。开发者需要合理设计程序结构,采用高效算法,以提高程序的执行效率和稳定性。在程序设计中,还应遵循模块化、可读性、可维护性等原则。

 

5. 重视测试和调试

测试和调试是保证程序正确性和稳定性的重要环节。开发者需要充分测试程序的各个部分,及时发现和解决问题。在调试过程中,应充分利用调试工具,逐步排查问题,确保程序的正确性。

 

三、单片机常用代码大全

 

  1. 位码(共阴):

0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f

  1. 断码(共阳):

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

  1. 独立管码(共阳):

0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08,0x10,0xc0,0x62,0x84,0x60,0x70

4、循环函数intrins

    _crol_字符循环左移

    _cror_字符循环右移

    _irol_整数循环左移

    _iror_整数循环右移

    _lror_长整数循环左移

    _lror_长整数循环右移

    _nop_空操作8051 NOP 指令

    _testbit_测试并清零位8051 JBC 指令

5、中段代码

  interrupt  0  外部中断0

  interrupt  1  定时器0中断

  interrupt  2  外部中断1

  interrupt  3  定时器1中断

  interrupt  4  串口中断

  interrupt  5  定时器2中断(52里面,51没有)

6、IIC总线

开始信号:

void IICstart()

{

  scl=1;

  delay();

  sda=1;

  delay();

  sda=0;

  delay();

  scl=0;

}

结束信号

void IICstop()

{

  scl=1;

  delay();

  sda=0;

  delay();

  sda=1;

  delay();

}

应答信号

void IICyingda()

{

  uchar j;

  scl=1;

  delay();

  while((sda==1)&&j<250)j++;

  //sda=0;

  //delay();

  scl=0;

  delay();

}

写信号(写入一8位数据)

void write_byte(uchar w)

{

  uchar i,temp;

  temp=w;

 

  for(i=0;i<8;i++)

  {

    scl=0;

    delay();

    temp=temp<<1;

    sda=CY;

    delay();

    scl=1;

    delay();

  }

  scl=0;

  delay();

  sda=0;

  delay();

}

读信号(读出一个8位数据)

uchar read_byte(void)

{

  uchar i,j,k;

  sda=1;

  delay();

  for(i=0;i<8;i++)

  {

    scl=1;

    delay();

    j=sda;

    k=(k<<1)|j;

    scl=0;

    delay();

  }

  scl=0;

  delay();

  return k;

}

7、时钟调试键盘扫描

void keyscan()

{

 

  if(k1==0)

  {

                delay(5);

                if(k1==0)

                {

                    while(!k1); //

                    k1num++;

                }   

                if(k1num==1)

                {

                    TR0=0;

                    write_zhiling(0x80+0x40+11);

                    write_zhiling(0x0f);

                }

                if(k1num==2)

                {

                    TR0=0;

                                        write_zhiling(0x80+0x40+8);

                }

                if(k1num==3)

                {

                    TR0=0;

                                        write_zhiling(0x80+0x40+5);

                }

                if(k1num==4)

                {

                    k1num=0;

                    write_zhiling(0x0c);

                    TR0=1;//

                }

    }

   

        if(k1num!=0)

          {

            if(k2==0)

            {

              delay(5);

              if(k2==0)

              {

                              while(!k2);

                                if(k1num==1)

                              {

                                miao++;

                                if(miao==60)

                                  {

                                    miao=0;

                                    fen++;

                                    if(fen==60)

                                    {

                                      fen=0;

                                      write_jingwei(7,fen);

                                    }

                                    write_jingwei(10,miao);

                                    write_jingwei(7,fen);

                                    write_zhiling(0x80+0x40+11);                                   

                                  }

                                    write_jingwei(10,miao);

                                    write_zhiling(0x80+0x40+11);     

                              }

       

                              if(k1num==2)

                              {

                                fen++;

                                if(fen==60)

                                  {

                                    fen=0;

                                    shi++;

                                    if(shi==24)

                                    {

                                      shi=0;

                                      write_jingwei(4,shi);

                                    }

                                    write_jingwei(7,fen);

                                    write_jingwei(4,shi);

                                    write_zhiling(0x80+0x40+8);

                                   

                                  }

                                    write_jingwei(7,fen);

                                    write_zhiling(0x80+0x40+8);

                              }

       

                              if(k1num==3)

                              {

                                shi++;

                                  if(shi==24)

                                  {

                                    shi=0;

                                    write_jingwei(4,shi);

                                    write_zhiling(0x80+0x40+5);

                                  }

                                    write_jingwei(4,shi);

                                    write_zhiling(0x80+0x40+5);

                              }

              }

       

          }

    }

   

    if(k1num!=0)

          {

            if(k3==0)

            {

              delay(5);

              if(k3==0)

              {

                              while(!k3);

                                if(k1num==1)

                              {

                                miao--;

                                if(miao==-1)

                                  {

                                    miao=59;

                                    fen--;

                                    if(fen==-1)

                                    {

                                      fen=59;

                                      write_jingwei(7,fen);

                                    }

                                    write_jingwei(10,miao);

                                    write_jingwei(7,fen);

                                    write_zhiling(0x80+0x40+11);

                               

                                  }

                                    write_jingwei(10,miao);

                                    write_zhiling(0x80+0x40+11);     

                              }

       

                              if(k1num==2)

                              {

                                fen--;

                                if(fen==-1)

                                  {

                                    fen=59;

                                    shi--;

                                    if(shi==-1)

                                    {

                                      shi=23;

                                      write_jingwei(4,shi);

                                    }

                                    write_jingwei(7,fen);

                                    write_jingwei(4,shi);

                                    write_zhiling(0x80+0x40+8);

                                   

                               

                                  }

                                    write_jingwei(7,fen);

                                    write_zhiling(0x80+0x40+8);

                              }

       

                              if(k1num==3)

                              {

                                shi--;

                                  if(shi==-1)

  

...全文

相关推荐

keil下51单片机程序的烧写过程

该文章只有十几页,以图示的方式讲解了keil下51单片机烧写的软件设置。三分钟就可以学会。

龚黎明

PIC单片机C语言程序设计】使用C语言编写的PIC单片机程序设计详解

通过上述步骤,我们成功地使用C语言编写了一个简单的PIC单片机程序,并将其烧录到了目标单片机上。这只是一个简单的示例,PIC单片机的功能非常丰富,可以实现各种复杂的应用。将编程器连接到开发板上,选择正确的单片机型号和连接方式,然后烧录程序。接下来,我们可以在IDE中创建一个新的C文件,并编写PIC单片机程序。以下是一个简单的示例程序,它将点亮和熄灭PIC开发板上的LED灯。,在其中点亮LED并延时1秒,然后熄灭LED并再次延时1秒。函数中,我们将Port B配置为输出,并清除Port B上的输出。

诗意悠长

单片机与DSP中的PIC单片机程序设计的基本格式

为了快速掌握PIC单片机源程序的基本结构,这里给出一个典型的程序结构框架。建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件如《P16F84INC》,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。现举例如下。   TITLE“This is……”;程序标题   ;程序说明   LIST P=16F84,F=1NHX8M   ;   include <p16F84>   -config_RC_Qsc &_WDT_0FF…   ;资源定

weixin_38629976

工程师分享的单片机学习步骤

在网上看到这样一篇帖子,主要讲了单片机学习的步骤,感觉对自己很有用,特转载过来与广大单片机爱好者一起分享!

weixin_38732343

单片机与DSP中的单片机学习深入必要的几个步骤

成为一名嵌入式工程师,简单的单片机基础学习与应用是不可缺少的。学习单片机就是学习单片机的硬件结构,内部资源与外设的应用。在C语言中(极少量的汇编)掌握各种功能的初始化,启动与停止,实现各种功能函数的编写与调试。     第一步:数字I/O的应用     在大多数的单片机实验中,跑马灯实验正是数字I/O的典型应用,也是跑马灯的实验被安排第一个的原因。通过将单片机的I/O引脚位进行置位或清零来点亮或关闭LED灯,虽然简单,但是这就是数字电路中的逻辑功能。数学I/O应用的实验还有按键实验,当按下某键时,某LED灯被点亮。数字I/O实验教会我们单片机的编程思想,必须首先对单片机的相应寄存器进行配置

weixin_38695452
评论
收藏 已收藏
分享
返回顶部