编写单片机的基本流程

前言

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

一、单片机的基本概念

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

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

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)

  

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九木德xxxx.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值