51单片机c语言编程入门(51单片机c语言编程入门教程)

http://www.itjxue.com  2023-03-15 22:50  来源:未知  点击次数: 

很简的51单片机C语言流水灯程序

1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。

例程:

#includereg51.h??//51单片机头文件

#include?intrins.h?//包含有左右循环移位子函数的库

#define?uint?unsigned?int????//宏定义

#define?uchar?unsigned?char??//宏定义

sbit?beep=P2^3;

void?delay(uint?z)??//延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.

{????????????????????//delay(500);大约延时500ms.

????uint?x,y;

????for(x=z;x0;x--)

????????for(y=110;y0;y--);????

}

void?main()????????????//主函数

{

????uchar?a,i,j;

????while(1)????????//大循环

????{

????????a=0xfe;?????//赋初值

????????for(j=0;j3;j++)?for(i=0;i8;i++)???//左移三次

????????{

????????????P1=a;???????//点亮小灯

????????????beep=0;?????//开启蜂鸣器

????????????delay(50);?//延时50毫秒

????????????beep=1;?????//关闭蜂鸣器

????????????delay(50);??//再延时50毫秒

????????????a=_crol_(a,1);?//将a变量循环左移一位

????????}

????????a=0x7f;

???????for(j=0;j3;j++)?for(i=0;i8;i++)??//右移三次

????????{

????????????P1=a;???????//点亮小灯

????????????beep=0;?????//开启蜂鸣器

????????????delay(50);?//延时50毫秒

????????????beep=1;?????//关闭蜂鸣器

????????????delay(50);???//再延时50毫秒

????????????a=_cror_(a,1);?//将a变量循环右移一位

????????}????????

????}

}

2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。

新概念51单片机C语言教程的作品目录

第1篇入门篇

1.1单片机概述

1.1.1什么是单片机

1.1.2单片机标号信息及封装类型

1.1.3单片机能做什么

1.1.4如何开始学习单片机

1.251单片机外部引脚介绍

1.3电平特性

1.4二进制与十六进制

1.4.1二进制

1.4.2十六进制

1.5二进制的逻辑运算

1.5.1与

1.5.2或

1.5.3非

1.5.4同或

1.5.5异或

1.6单片机的C51基础知识介绍

1.6.1利用C语言开发单片机的优点

1.6.2C51中的基本数据类型

1.6.3C51数据类型扩充定义

1.6.4C51中常用的头文件

1.6.5C51中的运算符

1.6.6C51中的基础语句

1.6.7学习单片机应该掌握的主要内容

2.1Keil工程建立及常用按钮介绍

2.1.1Keil工程的建立

2.1.2常用按钮介绍

2.2点亮第一个发光二极管

2.3while语句

2.4for语句及简单延时语句

2.5Keil仿真及延时语句的精确计算

2.6不带参数函数的写法及调用

2.7带参数函数的写法及调用

2.8利用C51库函数实现流水灯

第2篇内外部资源操作篇

3.1数码管显示原理

3.2数码管静态显示

3.3数码管动态显示

3.4中断概念

3.5单片机的定时器中断

4.1独立键盘检测

4.2矩阵键盘检测

5.1模拟量与数字量概述

5.2A/D转换原理及参数指标

5.3ADC0804工作原理及其实现方法

5.4D/A转换原理及其参数指标

5.5DAC0832工作原理及实现方法

5.6DAC0832输出电流转换成电压的方法

第6章串行口通信原理及操作流程

6.1并行与串行基本通信方式

6.2RS-232电平与TTL电平的转换

6.3波特率与定时器初值的关系

6.451单片机串行口结构描述

6.5串行口方式1编程与实现

6.6串行口打印在调试程序中的应用

第7章通用型1602,12232,12864液晶操作方法

7.1液晶概述

7.2常用1602液晶操作实例

7.3常用12232液晶操作实例

7.4常用12864液晶操作实例

第8章I2C总线AT24C02芯片应用

8.1I2C总线概述

8.2单片机模拟I2C总线通信

8.3E2PROMAT24C02与单片机的通信实例

第9章基础运放电路专题

9.1运放概述及参数介绍

9.2反相放大器

9.3同相放大器

9.4电压跟随器

9.5加法器

9.6差分放大器

9.7微分器

9.8积分器

第3篇提高篇

第10章定时器/计数器应用提高

10.1方式0应用

10.2方式2应用

10.3方式3应用

10.452单片机定时器2介绍

10.5计数器应用

第11章串行口应用提高

11.1方式0应用

11.2方式2和方式3应用

11.3单片机双机通信

11.4单片机多机通信

第12章指针

12.1指针与指针变量

12.1.1内存单元、地址和指针

12.1.2指针变量的定义、赋值与引用

12.2指针变量的运算

12.3指针与数组

12.3.1指针与一维数组

12.3.2指针与多维数组

12.4指针与函数

12.4.1指针作为函数的参数

12.4.2指向函数的指针

12.4.3指针型函数

12.5指针与字符串

12.5.1字符串的表达形式

12.5.2字符指针作为函数参数

12.5.3 使用字符指针与字符数组的区别

12.6指针数组与命令行参数

12.6.1 指针数组的定义和使用

12.6.2指向指针的指针

12.6.3 指针数组作为main()函数的命令行参数

12.7指针小结

12.7.1指针概念综述

12.7.2指针运算小结

12.7.3等价表达式

12.8C51中指针的使用

12.8.1指针变量的定义

12.8.2指针应用

第13章STC系列51单片机功能介绍

13.1单片机空闲与掉电模式应用

13.2“看门狗”概念及其应用

13.3用软件实现系统复位

13.4内部扩展RAM的应用

13.5扩展P4口的应用

13.6内部E2PROM的应用

13.7STC89系列单片机内部A/D应用

13.8STC12系列单片机内部A/D应用

13.9STC12系列单片机的PCA/PWM介绍

13.10STC12系列单片机的SPI接口介绍

13.11STC12系列单片机的“576MHz”超速运行

第4篇实战篇

第14章利用51单片机的定时器设计一个时钟

14.1如何从矩阵键盘中分解出独立按键

14.2原理图分析

14.3实例讲解

第15章使用DS12C887时钟芯片设计高精度时钟

15.1时钟芯片概述

15.2DS12C887时钟芯片介绍

15.3如何用TX-1C实验板扩展本实验

15.4原理图分析

15.5实例讲解

第16章使用DS18B20温度传感器设计温控系统

16.1温度传感器概述

16.2DS18B20温度传感器介绍

16.3实例讲解

第17章太阳能充/放电控制器

17.1控制器原理图分析

17.2控制器板上元件介绍

17.3实例讲解

第18章VC、VB(MSCOMM控件)与单片机通信实现温度显示

18.1VCMSCOMM控件与单片机通信实现温度显示

18.2VBMSCOMM控件与单片机通信实现温度显示

第5篇拓展篇

第19章使用Protell99绘制电路图全过程

19.1绘制电路板概述

19.2建立工程

19.3制作元件库

19.4添加封装及制作PCB封装库

19.5错误检查及生成PCB

19.6布线电气特性设置

19.7自动布线和手动布线

第20章ISD400x系列语音芯片应用

20.1ISD400x系列语音芯片介绍

20.2ISD400x系列语音芯片操作规则

20.3ISD400x系列语音芯片应用实现

第21章电机专题

21.1直流电机原理及应用

21.2步进电机原理及应用

21.3舵机原理及其应用

第22章常用元器件介绍

22.1二极管

22.2电容

22.3场效应管

22.4光耦

22.5蜂鸣器

22.6继电器

22.7自恢复保险

22.8瞬态电压抑制器

22.9晶闸管(可控硅)

22.10电荷泵

第23章直流稳压电源专题

23.1整流电路

23.2滤波电路

23.3稳压电路

23.4集成稳压模块的使用

23.5串联开关型稳压电源

第24章运放扩展专题

24.1简单低通滤波器

24.2“电流-电压”转换电路

24.3光电放大器

24.4精密电流源

24.5可调参考电压源

24.6复位稳定放大器

24.7模拟乘法器

24.8全波整流器和平均值滤波器

24.9正弦波振荡器

24.10三角波发生器

24.11自动跟踪对称电源

24.12可调实验电源

24.13运放相关术语表

附录A天祥电子开发实验板简介

A.1TX-1C51单片机开发板(配套详细视频教程)

A.2AVR单片机开发板(配套详细视频教程)

A.3PIC单片机开发板(配套详细视频教程)

A.4J-Link全功能ARM仿真器

A.5三星S3C44B0ARM7入门级开发板

A.6三星S3C44B0ARM7提高级开发板

A.7TX-51STAR51单片机开发板(配套详细视频教程)

参考文献

51单片机是什么?如何学习它的编程?都用在哪些方面

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。

由于intel生产的8031的升级版8051工艺成熟,成为当时市场应用量最大的单片机,所以对此类兼容芯片统称51单片机。

该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。

现在每年仍旧会使用几十亿片51系列的兼容芯片,在你想得到的电器、玩具上,比如:遥控灯具、洗衣机、冰箱、电子钟表、显示器、汽车(每辆汽车可能会用到十几到几十片)。。。。。

学习它很简单,到当地书店、图书馆、随手可以找到几十种单片机入门书,8成以上是讲51系列单片机的。

----------------

学习编辑

作为一个初学者,如何单片机入门?

知识上,其实不需要多少东西,会简单的C语言,知道51单片机的基本结构就可以了。一般的大学毕业生都可以了,自学过这2门课程的高中生也够条件。设备上,一般是建议购买一个仿真器,例如,的“双功能下载线”就具有良好的稳定性和较快的下载速度,上位机可扩展,可以下载更多的单片机及嵌入式芯片。通过实验,这样才可以进行实际的,全面的学习。日后在工作上,仿真器也大有用处。还有,一般光有仿真器是不行,还得有一个实际的电路,即学习板,如图,即为,单片机最小系统。

学习板以强大的接口为主,单片机的学习分两方面,一方面是单片机的原理及内部结构,另一方面是单片机的接口技术。这些都是需要平时多积累,多动手,多思考,这样才能学好单片机技术。

注:“双功能下载线”在百度文库里有详细的使用说明,并且上位机会定期更新以支持更多的单片机。

单片机学习的4个阶段

一、整体了解

要知道 单片机是什么?单片机有何用?如何系统学习单片机?单片机系统设计的流程是怎样的,需要掌握哪些辅助软件?

了解这些之后,我们的学习就有了目标和方向。

二、揭秘 单片机很难学,是因为其内部结构、编程语言抽象,且实际应用中与其他电子技术和元器件知识相互关联,需结合起来一起设计开发产品。所以,第二阶段要了解单片机的内部结构是怎样的?单片机开发经常会用到哪些电子技术和元器件知识?如何将一条条编程指令组合成一段段有效的程序?

三、解密 之所以单片机能成为控制核心,设计出包罗万象的应用系统来,是因为开发者利用了单片机提供的种种功能及各种外设。所以,第三阶段我们要掌握单片机的各种功能,再加上诸如传感器、模数转换、扫描显示、串行、中断的应用思维,结合更多的元器件、电子电路知识,逐个学习、体会实际的单片机系统的秘密。

四、远航 通过以上三个阶段,读者基本就可掌握单片机的应用了。但要设计出丰富的单片机系统,解决复杂的实际问题,还需要了解更多的外设知识及其与单片机的联系(如电动机、各类

存储器、继电器、红外管等)。这些需要不断的学习和积累。有时候,接到一些开发任务,就需要你针对这个任务自觉地去搜集、学习相关知识,在实践中不断载学习和提高。

参考百度百科:

51单片机c语言编程?

对端口输出操作,直接适用赋值语句即可。 比如 P1 = 0x03;

对端口读取操作,直接赋值给局部变量即可。

对数码管操作,需要先定义 对应的 码表, Tab[16] = {, }分别对应 0~F 的端口输出值、点亮相应的LED位; 然后直接 操作端口输出对应字符即可,比如P1=Tab[3] 数码管输出显示3

51单片机C语言编程

// 51单片机C语言编程,这个时钟+秒表可以参考一下。

#includereg51.h

#define uchar unsigned char

#define uint unsigned int

sbit qingling=P1^0; ?//清零

sbit tiaofen=P1^1; ?//调分

sbit tiaoshi=P1^2; ?//调时

sbit sounder=P1^7; ?//naozhong

uint a,b;

uchar hour,minu,sec, ? //时钟

hour0,minu0,sec0,//秒表

hour1,minu1,sec1;

h1,h2,m1,m2,s1,s2,//显示位

k,s;//状态转换标志

uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*****************函数声明***********************/

void keyscan();

void init();

void delay(uchar z);

void display(uchar,uchar,uchar);

void sounde();

/*****************主函数*************************/

void main()

{

init();

while(1)

{ ? ?

while(TR1)

{

keyscan(); ?//扫描函数

while(s==1) //s是状态标志,当s=0时,闹钟取消。s=1时,设定闹钟时间(也是通过调时,调分函数);

{ ?//s=2时,闹钟工作,时间与设定时刻一致时,闹钟响(一分钟后自动关闭,可手动关闭)。再次切换,s=0.

keyscan(); ? //s状态切换(0-》1-》2-》0)通过外部中断1实现。

display(hour1,minu1,sec1); //闹钟时刻显示

}

display(hour0,minu0,sec0);//时钟表显示

while(k) ?/*k是秒表状态(0-》1-》2-》0)通过外部中断0实现。0秒表关;1秒表从零计时;2秒表停,显示计时时间*/

{

display(hour,minu,sec); //秒表显示

} ? ?

}

}

}

/*****************初始化函数***********************/

void init()

{

a=0;

b=0;

k=0;

s=0;

hour0=0;

minu0=0;

sec0=0;

hour=0;

minu=0;

sec=0;

hour1=0;

minu1=0;

sec1=0;

TMOD=0x11; ? ? ?//定时器0,1工作于方式1;赋初值

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

EX0=1; ? //秒表中断

EX1=1; ? //闹钟设定中断

ET0=1;

ET1=1;

IT0=1; ? ?//边沿触发方式

IT1=1;

PX0=1;

PX1=1;

TR0=0; ? ? //初始,秒表不工作

TR1=1; ? ?//时钟一开始工作

}

/*****************定时器0中断*************/

void timer0_int() interrupt 1 //秒表

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

a++;

if(a==2)

{

a=0;

sec++;

if(sec==100)

{

sec=0; ?//毫秒级

minu++;

if(minu==60)

{

minu=0; ? //秒

hour++;

if(hour==60) ? //分

{

hour=0;

}

}

}

}

}

/*************外部中断0中断函数************/

void ex0_int() interrupt 0

{

k++;

if(k==3)

k=0;

if(k==1)

{

TR0=~TR0;

if(TR0==1)

{ ?

hour=0;

minu=0;

sec=0;

}

}

if(k==2)

{

TR0=~TR0;

}

}

/*************外部中断1中断函数************/

void ex1_int() interrupt 2

{

s++;

if(s==3)

s=0;

}

/*************定时器1中断****************/

void timer1_int() interrupt 3 ? //控制时钟工作

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

if(s==2)

{

if(hour1==hour0 minu0==minu1)

sounde();

}

b++;

if(b==20)

{

b=0;

sec0++;

if(sec0==60)

{

sec0=0;

minu0++;

if(minu0==60)

{

minu0=0;

hour0++;

if(hour0==24)

hour0=0; ? ? ? ? ? ? ? ? ? ? ?

}

}

}

}

/*************键盘扫描****************/

void keyscan()

{

if(s==1)

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec1=0;

minu1=0;

hour1=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu1++;

if(minu1==60)

{

minu1=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour1++;

if(hour1==24)

{

hour1=0;

}

while(!tiaoshi);

}

}

else ? ? ?//调整时钟时间

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec0=0;

minu0=0;

hour0=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu0++;

if(minu0==60)

{

minu0=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour0++;

if(hour0==24)

{

hour0=0;

}

while(!tiaoshi);

}

}

}

/*************显示函数****************/

void display(uchar hour,uchar minu,uchar sec)

{

h1=hour/10;

h2=hour%10;

m1=minu/10;

m2=minu%10;

s1=sec/10;

s2=sec%10;

P0=0xff;

P2=table[h1];

P0=select[7];

delay(5);

P0=0xff;

P2=table[h2];

P0=select[6];

delay(5);

P0=0xff;

P2=0x40;;

P0=select[5];

delay(5);

P0=0xff;

P2=table[m1];

P0=select[4];

delay(5);

P0=0xff;

P2=table[m2];

P0=select[3];

delay(5);

P0=0xff;

P2=0x40;

P0=select[2];

delay(5);

P0=0xff;

P2=table[s1];

P0=select[1];

delay(5);

P0=0xff;

P2=table[s2];

P0=select[0];

delay(5);

}

/*************闹钟函数****************/

void sounde()

{

sounder=~sounder;

}

/*************延时函数****************/

void delay(uchar z)

{

int x,y;

for(x=z;x0;x--)

for(y=110;y0;y--);

}

没C语言基础怎么学51单片机?

先学简单的C语言基础,再学51单片机会比较容易入门,因为现在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言。

一、51单片机是对所有兼容Intel8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flashrom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。

二、单片机学习主要分三点:

1、完成单片机开发板的学习,理解单片机的工作,能看懂单片机程序。

2、能够照着照着芯片手册(datasheet)试着编写名类芯片的驱动程序。

3、掌握常见的低速通信协议(I2C、SPl等)和高速通信协议。

(责任编辑:IT教学网)

更多

推荐软件水平考试文章