51单片机程序的编写方法
汇编语言(了解即可)
org 0000h
MOV a,#2fh
sjmp $
仿真寄存器的值
C语言
引用头文件(注意格式规范)
#include <reg51.h>
某些增强型单片机需要自己寻找头文件,keil中没有提供
学会查看头文件的内容
定义引脚
sbit P10=P1^0;
直接对IO口进行操作
P1=0xff;
粗略的延迟函数
基于12M晶振
us延迟
void delay_us(int n_us)
{
int j,k;
for(j=0;j<n_us;j++)
for(k=0;k<1;k++);
}
ms延迟
void delay_ms(unsigned int a)
{
int q;
while(a--){
for(q=400;q>0;q--);
}
}
led灯的驱动
根据电路判断写1还是写0
仿真方法
PORT2.7
流水灯
P2=0xfe;
循环中写
P2=P2<<1;
开关检测
先写1,后读取
注意分析电路
数码管的驱动原理
字形码
共阴 共阳
0 3F C0
1 06 F9
2 5B A4
3 4F B0
4 66 99
5 6D 92
6 7D 82
7 07 F8
8 7F 80
9 6F 90
A 77 88
B 7C 83
C 39 C6
D 5E A1
E 79 86
F 71 8E
H 76 89
P 73 8C
显示一个数字
P1=0xf1;
P0=0x3f;
扫描显示
写入ROM
unsigned char code DIG_PLACE[4]={0xf1,0xf2,0xf4,0xf8};
unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
P1=DIG_PLACE[0];
P0=DIG_CODE[4];
delay_us(1);
P1=DIG_PLACE[1];
P0=DIG_CODE[3];
delay_us(1);
P1=DIG_PLACE[2];
P0=DIG_CODE[2];
delay_us(1);
P1=DIG_PLACE[3];
P0=DIG_CODE[1];
delay_us(1);
还有一些专用的数据管驱动芯片
LCD显示屏(学会调用厂家封装的库)
用到的文件移植到自己程序里
中断与定时器
概念
51的定时器
配置
num=65536-nus/1;
TMOD=0x01;
TH0=num/256;
TL0=num%256;
th0=TH0;
tl0=TL0;
EA=1;
ET0=1;
//PT0=1;
TR0=1;
中断服务函数
TIMER0()interrupt 1
{
TH0=th0;
TL0=tl0;
}
外部中断
P3.2 INT0
P3.3 INT1
配置
EA=1;
EX0=1;
//PX0=1;
IT0=1;
中断服务函数
INT0_()interrupt 0
{
//IE0=0;
}
|