『壹』 求51单片机c语言教程 pdf
单片机学习方法:
网上单片机资料很多:
http://www.mcufan.com/scom.htm
http://www.51c51.com/cyuyan.htm
http://www.laogu.com/downtop.aspx
上面去搜搜看单片机的学习资料,都有入门级的
另外书店里面入门级的书也很多,可以买一本(北航出版的比较好)
1.入门时先了解单片机的构造啊原理啊
2.如果没有实验板自己搭建单片机的最小平台是比较难的
网上有个叫proteus的软件,可以用于单片机的仿真,就是说你编的程序可以在这个软件里运行,效果挺逼真的,可免费下载.
3.单片机的编程软件有keil或者wave,推荐前者,可以用c语言编写也可以汇编语言,c语言比较好学,推荐入门学习c语言,(可以买c和汇编语言都有介绍的单片机的书)
4.然后用keil编写程序在proteus上跑起来,如果你能点亮经典的单片机流水灯实验,那你就已经入门了
另:单片机的开发板或者最小系统可以买,电路水平高的话也可以自己搭建起来,51单片机大概6块左右一片自己搭建最小系统很便宜滴,学单片机一定要多做实验,不过推荐还是从仿真入门,仿真成功了后面的就有方向了.
『贰』 51单片机编程,用C语言。
给你一个矩阵键盘的参考程序
行列扫描:通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。
/****************************************************************************
*函数名
:KeyDown
*函数功能
:
检测有按键按下并读取键值
*输入
:
无
*输出
:
无
****************************************************************************/
voidKeyDown(void)
{
char
a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
Delay10ms();//延时10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
GPIO_KEY=0X0F;
//测试列
switch(GPIO_KEY)
{
case(0X07):
KeyValue=0;break;
case(0X0b):
KeyValue=1;break;
case(0X0d):
KeyValue=2;break;
case(0X0e):
KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70):
KeyValue=KeyValue;break;
case(0Xb0):
KeyValue=KeyValue+4;break;
case(0Xd0):
KeyValue=KeyValue+8;break;
case(0Xe0):
KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0))//按键松手检测
{
Delay10ms();
a++;
}
}
}
}
『叁』 51单片机C语言编程
// 51单片机C语言编程,这个时钟+秒表可以参考一下。
#include<reg51.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;x>0;x--)
for(y=110;y>0;y--);
}
『肆』 51单片机项目教程 C语言版 高清带书签(吴险峰)PDF,哪里可以下载
《51单片机项目教程C语言版 赠单片机开发板.pdf》(选择普通下载即可!)
1、找到这本资料,美中不足版就是没有书签权,凑合看吧;
2、手机浏览器网页端登 陆 或 PC电脑端登 陆,即可查看、下载;
3、文件有时效性,若失效或下载问题,留言;
『伍』 王云51单片机C语言教程,书本的配套资料在哪下载(云龙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单片机蜂鸣器播放音乐的教程 C语言
这是我学校电子设计时做的,可以弹琴,也有几首歌在里面。。你应该看得懂#include <reg52.h> #define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit BEEP=P2^0; //喇叭输出脚uchar th0_f; //在中断中装载的T0的值高8位
uchar tl0_f; //在中断中装载的T0的值低8位
uchar key;/*------------------------------------------------
函数声明
------------------------------------------------*/
uchar keyscan(void);//键盘扫描程序
void delay(uint i); //延时子程序/*-------- T0的值,及输出频率对照表 --------------*/
uchar code freq[36*2]={
0xA9,0xEF, //0x3F,0XEE,//00220HZ ,1 //0
0x93,0xF0, //0X3D,0XEF,//00233HZ ,1#
0x73,0xF1, //0X30,0XF0,//00247HZ ,2
0x49,0xF2, //0X18,0XF1,//00262HZ ,2#
0x07,0xF3, //0XE6,0XF1,//00277HZ ,3
0xC8,0xF3, //0XB7,0XF2,//00294HZ ,4
0x73,0xF4, //0X71,0XF3,//00311HZ ,4#
0x1E,0xF5, //0X2A,0XF4,//00330HZ ,5
0xB6,0xF5, //0XCF,0XF4,//00349HZ ,5#
0x4C,0xF6, //0X72,0XF5,//00370HZ ,6
0xD7,0xF6, //0X09,0XF6,//00392HZ ,6#
0x5A,0xF7, //0X97,0XF6,//00415HZ ,7
0xD8,0xF7, //0X20,0XF7,//00440HZ 1 //12
0x4D,0xF8, //0X9F,0XF7,//00466HZ 1# //13
0xBD,0xF8, //0X18,0XF8,//00494HZ 2 //14
0x24,0xF9, //0X88,0XF8,//00523HZ 2# //15
0x87,0xF9, //0XF3,0XF8,//00554HZ 3 //16
0xE4,0xF9, //0X59,0XF9,//00587HZ 4 //17
0x3D,0xFA, //0X05,0XFA,//00622HZ 4# //18
0x90,0xFA, //0X13,0XFA,//00659HZ 5 //19
0xDE,0xFA, //0X66,0XFA,//00698HZ 5# //20
0x29,0xFB, //0XB9,0XFA,//00740HZ 6 //21
0x6F,0xFB, //0X05,0XFB,//00784HZ 6# //22
0xB1,0xFB, //0X4D,0XFB,//00831HZ 7 //23
0xEF,0xFB, //0X90,0XFB,//00880HZ `1
0x2A,0xFC, //0XD0,0XFB,//00932HZ `1#
0x62,0xFC, //0X0C,0XFC,//00988HZ `2
0x95,0xFC, //0X44,0XFC,//01046HZ `2#
0xC7,0xFC, //0X7B,0XFC,//01109HZ `3
0xF6,0xFC, //0XAD,0XFC,//01175HZ `4
0x22,0xFD, //0XDD,0XFC,//01244HZ `4#
0x4B,0xFD, //0X0A,0XFD,//01318HZ `5
0x73,0xFD, //0X35,0XFD,//01397HZ `5#
0x98,0xFD, //0X5D,0XFD,//01480HZ `6
0xBB,0xFD, //0X83,0XFD,//01568HZ `6#
0xDC,0xFD, //0XA6,0XFD,//01661HZ `7 //35
};//定时中断0,用于产生唱歌频率
timer0() interrupt 1
{
TL0=tl0_f;TH0=th0_f; //调入预定时值
BEEP=~BEEP; //取反音乐输出IO
}//音乐符号串解释函数
//入口:要解释的音乐符号串,输出的音调串,输出的时长串
changedata(uchar *song,uchar *diao,uchar *jie)
{
uchar i,i1,j;
char gaodi; //高低+/-12音阶
uchar banyin;//有没有半个升音阶
uchar yinchang;//音长
uchar code jie7[8]={0,12,14,16,17,19,21,23}; //C调的7个值
*diao=*song;
for(i=0,i1=0;;)
{
gaodi=0; //高低=0
banyin=0;//半音=0
yinchang=4;//音长1拍
if((*(song+i)=='|') || (*(song+i)==' ')) i++;
//拍子间隔和一个空格过滤
switch(*(song+i))
{
case ',': gaodi=-12;i++;//低音
break;
case '`': gaodi=12;i++; //高音
break;
}
if(*(song+i)==0) //遇到0结束
{
*(diao+i1)=0; //加入结束标志0
*(jie+i1)=0;
return;
}
j=*(song+i)-0x30; i++; //取出基准音
j=jie7[j]+gaodi; //加上高低音
yinc: switch(*(song+i))
{
case '#': //有半音j加一个音阶
i++;j++;
goto yinc;
case '-': //有一个音节加长
yinchang+=4;
i++;
goto yinc;
case '_': //有一个音节缩短
yinchang/=2;
i++;
goto yinc;
case '.': //有一个加半拍
yinchang=yinchang+yinchang/2;
i++;
goto yinc;
}
*(diao+i1)=j; //记录音符
*(jie+i1)=yinchang; //记录音长
i1++;
}
}//奏乐函数
//入口:要演奏的音乐符号串
void play(uchar *songdata)
{
uchar i,c,j=0;
uint n;
uchar diaodata[48]; //音调缓冲
uchar jiedata[48]; //音长缓冲
changedata(songdata,diaodata,jiedata); //解释音乐符号串
TR0=1;
for(i=0;diaodata[i]!=0;i++) //逐个符号演奏
{
tl0_f=freq[diaodata[i]*2]; //取出对应的定时值送给T0
th0_f=freq[diaodata[i]*2+1];
for(c=0;c<jiedata[i];c++) //按照音长延时
{ key = keyscan();
for(n=0;n<29500;n++); // 29500
if(key != 0xff)//((!K1)||(!K2)||(!K3)||(!K4))//发现按键,立即退出播放
{
TR0=0;
return;
}
}
TR0=0;
for(n=0;n<460;n++); //460音符间延时
TR0=1;
}
TR0=0;
}//一分钱
uchar code yifenqian[]={
"5`1|6_`1_5|3_5_2_3_|5-|"
"3_5_6_`1_|5_6_5_3_|1.3__|2-|"
"3_2_1_2_|3-|6_5_3_5_|6-|"
"5_`1_6_5_|3_5_2|5_2_3_2_|1-|"
}; //世上只有妈妈好
uchar code mamahao[]={
"6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|"
"2.3_55_6_|321-|5.3_2_1_,6_1_|,5--"
};
//找朋友
uchar code zhaopengyou[]={ "5_6_5_6_|5_6_5|5_`1_7_6_|5 3|"
"5_5_3_4_|5_5_3|1_4_3_2_|1_2_1|"
};
//茉莉花
uchar code molihua[]={"33_5_6_`1_`1_6_|55_6_5-|33_5_6_`1_`1_6_|55_6_5-|"
"5553_5_|665-|32_3_53_2_|11_2_1|"
//"3_2_1_3_2.3_|56_`1_5-|23_5_2_3_1_,6_|,5-,61|"
//"2.3_1_2-1_,6_|,5--"
};
//新年好
uchar code xinnianhao[]={
"1_1_1 ,5|3_3_3 1|1_3_5 5|4_3_2-|"
"2_3_4-|3_2_3 1|1_3_2 ,5|,7_2_1-|"
};
//小星星
uchar code xingxing[]={
"1155|665-|4433|221-|"
"5544|332-|5544|332-|"
"1155|665-|4433|221-|"
};
//外婆的澎湖湾
uchar code waipodephw[]={
"3_5_5_5_6_`1_6_5_|`1_`1_`1_6_5-|"
"`3_`3_`3_`3_`4_`3_`2_`1_|`2_`2_`2_`3_`2-|"
"`3_`3_`3_`3_`4_`3_`2_`1_|6_`1_`1_6_5-|"
};
}
『捌』 学习单片机C语言,哪些书比较好
先针对性回答一下你的问题:
1、单片机学习需要的知识,单片机原理,编程技术,电子电路。
2、学无止境,当然要继续学习,C语言对于单片机非常重要,多数人都是用c,包括我。如果从汇编开始我不知道要经过多少努力你才能开始做开发。
3、VB可以做电脑程序开发,可以做成软件和单片机进行通讯,可以用电脑和单片机系统组成一个应用项目。一切知识都是有用的,看你的爱好和你的时间决定吧。
4、单片机和数学基本上没有太直接联系,不要被别人吓住了。
另外再加一条单片机种类选型的看法
5、初学还是建议学习51单片机,因为51单片机容易上手,学习资料也多。你说的指令集51的算是少的了。如果使用汇编的话就要学会每条汇编指令。而现在多数单片机工程师都是选择c语言进行设计。而且c语言的程序除了单片机设置的部分,其他功能运算部分在每种单片机上基本都通用,这叫移植性好,而汇编语言则是每种类型的单片机一种指令集,单片机程序移植困难。
最后再说一下如何具体学习单片机:
很多想学单片机的人问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机,如何开始上手,如何开始熟练这个过程给大家讲讲。
先说说单片机,一般我们现在用的比较多的的MCS-51的单片机,它的资料比较多,用的人也很多,市场也很大。就我个人的体会怎么样才能更快的学会单片机这门课。单片机这门课是一项非常重视动手实践的科目,不能总是看书,但是学习它首先必须得看书,因为从书中你需要大概了解一下,单片机的各个功能寄存器,而说明白点,我们使用单片机就是用软件去控制单片机的各个功能寄存器,再说明白点,就是控制单片机那些管脚的电平什么时候输出高,什么时候输出低。由这些高低电平的变化来控制你的系统板,实现我们需要的各个功能。至于看书,只需大概了解单片机各管脚都是干什么的?能实现什么样的功能?第一次,第二次你可能看不明白,但这不要紧,因为还缺少实际的感观认识。所以我总是说,学单片机看书看两三天的就够了,看小说你一天能看五六本,看单片机你两三天看两三遍就够了,可以不用仔细的看。推荐一本书,就这一本就足够,书名是《新编MCS-51单片机应用设计》,是哈尔滨工业大学出版社出的的,作者是张毅刚。大概了解一下书上的内容,然后实践,这是非常关键的,如果说学单片机你不实践那是不可能学会的,关于实践有两种方法你可以选择,一种方法:你自己花钱买一块单片机的学习板,不要求功能太全的,对于初学者来说你买功能非常多的那种板子,上面有很多东西你这辈子都用不着,我建议有流水灯、数码管、独立键盘、矩阵键盘、AD或DA(原理一样)、液晶、蜂鸣器,这就差不多了。如果上面我提到的这些,你能熟练应用,那可以说对于单片机方面的硬件你已经入门了,剩下的就是自己练习设计电路,不断的积累经验。只要过了第一关,后面的路就好走多了,万事开头难,大家可能都听过。方法二:你身边如果有单片机方面的高手,向他求助,让他帮你搭个简单的最小系统板。对于高手来说,做个单片机的最小系统板只需要一分钟的时间,而对于初学者可就难多了,因为只有对硬件了解了,才能熟练运用。而如果你身边没有这样的高手,又找不到可以帮助你的人,那我劝你最好是自己买上一块,毕竟自己有一块要方便的多,以后做单片机类的小实验时都能用得上,还省事。
有了单片机学习板之后你就要多练习,最好是自己有台电脑,一天少看电影,少打游戏,把学习板和电脑连好,打开调试软件坐在电脑前,先学会怎么用调试软件,然后从最简单的流水灯实验做起,等你能让那八个流水灯按照你的意愿随意流动时你已经入门了,你会发现单片机是多么迷人的东西
『玖』 谁看过,51单片机C语言教程——入门、提高、开发、扩展全攻略.这本书郭天祥编的这书怎么样,适合初学者吗
这本书蛮不错的,我现在正在学51,用的也是这本书,初学者使用这本书是再好不过了。这本是之所以叫“C语言”教程,在于书内有怎样教你使用C语言编程。我在学单片机之前也没学过C语言,但现在已经可以自主编简单的程序,编程基础几乎都是从这本书上学来的。这本书所讲的内容很通俗,一看就能明白。书中有对51单片机内部结构最详细的介绍,当然也包括很多外围芯片的使用介绍,像74HC573锁存器,1602液晶12864液晶,DS12B887时钟芯片等等,还有很多。学单片机可以不必学汇编语言,汇编里的指令太难懂,也不好操作,我就完全不懂汇编,建议初学者直接使用C语言入门,这学起来更快一些,少走弯路,这本书全国的标准定价是69元,总共545页,如果直接买书的话各大新华书店都有卖的,书配套一盘光盘,里面有郭天祥的“十天征服51单片机”视频教程,有大量的程序源代码。视频结合教材,51单片机可以很快入门