打印
[疑难问答]

单片机的C语言基本用法

[复制链接]
895|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pl202|  楼主 | 2024-10-20 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;

}  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

2699

帖子

3

粉丝