学习单片机编程的基本流程
编写单片机
目录
前言
一、单片机的基本概念
二、编写单片机的关键因素
1. 明确任务和需求
2. 选择合适的开发工具
3. 熟悉单片机的指令集和架构
4. 重视程序结构和算法设计
5. 重视测试和调试
三、单片机常用代码大全
1、 位码(共阴):
2、 断码(共阳):
3、 独立管码(共阳):
4、循环函数intrins
5、中段代码
6、IIC总线
7、时钟调试键盘扫描
前言
在科技快速发展的时代,单片机作为自动化设备和智能电子产品的重要组成部分,得到了广泛应用。本文将探讨编写单片机的关键因素和策略,帮助读者更好地理解和应用单片机技术。
一、单片机的基本概念
单片机是一种集成电路芯片,集成了中央处理器、随机存取存储器、只读存储器、输入/输出接口等必要电子元件,广泛应用于各个领域。在单片机中,程序控制着整个系统的运行,因此编写高质量的程序对于单片机的应用至关重要。
二、编写单片机的关键因素
1. 明确任务和需求
在编写单片机程序之前,需要明确任务和需求,包括实现的功能、输入/输出接口、通信协议等。只有明确了任务和需求,才能有针对性地编写程序。
2. 选择合适的开发工具
选择合适的开发工具可以提高编程效率和代码质量。常用的单片机开发工具有Keil、IAR Embedded Workbench等。这些开发工具提供了丰富的库函数和调试工具,方便开发者进行程序编写和调试。
3. 熟悉单片机的指令集和架构
单片机的指令集和架构是编写程序的基础。开发者需要熟悉单片机的指令集,了解各种指令的功能和使用方法。同时,还需要了解单片机的架构,包括中央处理器、存储器、输入/输出接口等,以便更好地进行程序设计和优化。
4. 重视程序结构和算法设计
程序结构和算法设计是编写高质量程序的关键。开发者需要合理设计程序结构,采用高效算法,以提高程序的执行效率和稳定性。在程序设计中,还应遵循模块化、可读性、可维护性等原则。
5. 重视测试和调试
测试和调试是保证程序正确性和稳定性的重要环节。开发者需要充分测试程序的各个部分,及时发现和解决问题。在调试过程中,应充分利用调试工具,逐步排查问题,确保程序的正确性。
三、单片机常用代码大全
- 位码(共阴):
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
- 断码(共阳):
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
- 独立管码(共阳):
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)