打印
[51单片机]

好书推荐《51单片机轻松入门(C语言版)—基于STC15W4K系列》

[复制链接]
11877|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
强烈推荐单片机顶级好书,此书的编写建立在作者十多年的产品研发经验基础之上,又经历了大约5年的精心编写整理时间,每一章都是实际运用中非常重要的精华知识,此书可作为普通高校计算机类、电子类、自动控制类、仪器仪表类、机电一体化类等相关专业教学用书,对已有一定设计经验的单片机工程师也有重要参考价值。
本书特色:
1. 内容真实、言语简洁、通俗易懂。
2. 讲解功能强大的最新主流芯片STC15W4K系列,硬件与软件完全兼容STC15各个子系列、比如兼容STC15F2K60S2系列、兼容STC15W404S系列等,不完全兼容STC早期的STC89系列。
3. 配套视频教程可辅助参考。
4. 提供作者邮箱答疑、QQ在线答疑、国内知名网站单片机论坛答疑。
购买联系QQ群:324284310 ,验证:STC单片机、51单片机   ,邮箱:xgliyouquan@126.com

目录
目   录
第1章  单片机高效入门
  1.1  单片机简介
1.1.1  认识单片机
1.1.2  单片机的用途
1.1.3  学习的典型芯片与C语言介绍
1.1.4  本书配套实验板及相关学习工具介绍
1.2  点亮1个发光二极管   
  1.2.1  单片机型号命名规则
  1.2.2  单片机引脚功能说明   
1.2.3  制作一个最简单的单片机实验电路
1.2.4  使用KeiluVsion3环境编写最简单的程序
1.2.5  ISP下载程序到单片机(将电脑上的目标代码“灌入”单片机中运行)
1.2.6  程序解释
1.3  Keil 仿真  
1.3.1  软件仿真(标准8051方式仿真,不能仿真单片机新增功能)
1.3.2  硬件仿真(利用STC专用仿真芯片仿真,可仿真所有功能)
1.4  经典流水灯实例
1.5  单片机C语言延时程序详解
  1.5.1 学会使用计算软件
  1.5.2 计算软件内部运算过程详解
  1.5.3 利用库函数实现短暂精确延时
1.5.4 使用定时器/计数器实现精确延时
1.6  main()、void main()和int main()的区别
1.7  printf 格式化输出函数
第2章  单片机开发必须掌握的C语言基础
2.1  简单数据类型与运算符
2.1.1  原码、反码、补码、BCD码、格雷码
    2.1.2  常量      
    2.1.3 变量的数据类型(bit、char、int、long、float)
2.1.4  变量存储空间(code、data 、bdata 、idata、xdata)
2.1.5  变量存储类型(auto、static、extern)
2.1.6  变量作用域
2.1.7  运算符   
2.1.8  运算符的优先级与结合性
2.2  C51构造数据类型
2.2.1  数组:将相同类型数据组合在一起就构成数组(如数码管显示缓冲区)
2.2.2  结构体:将不同类型数据组合在一起就构成结构体(如年月日2014-12-31)
2.2.3  共用体:不同变量占用相同内存地址就是共用体
2.2.4  指针:用于直接读取或修改内存值
2.2.5  #define与typedef的差别
2.3  流程与控制
  2.3.1 分支结构
  2.3.2  循环结构
  2.3.3  跳转结构
2.4   函数
    2.4.1 函数定义
2.4.2  调用格式
2.4.3  传值调用与传地址调用2种方式对比
2.4.4  数组作为函数参数
2.4.5  使用指针变量作函数形式参数
2.4.6  使用结构体变量指针作为函数参数
2.4.7  函数作用域
2.4.8  库函数
2.5   模块化编程
    2.5.1  头文件的编写
    2.5.2  条件编译
2.5.3  多文件程序(模块化编程)
第3章  定时器/计数器、中断系统   
3.1 定时器/计数器
3.1.1 单片机定时器/计数器工作原理概述
3.1.2 定时器/计数器的相关寄存器   
3.1.3 定时器/计数器的工作方式     
3.1.4 初值计算
3.1.5 编程举例
3.2 可编程时钟输出
3.3 中断系统
3.3.1 中断系统结构图
3.3.2 操作电路图中的开关(相关寄存器介绍)
3.3.3 编写中断函数
3.3.4 中断程序举例
3.3.5 外中断代码调试(按键的防抖技术)
第4章  串口通信
4.1  最基本的串口通信
4.1.1  串口数据发送格式
4.1.2  串口相关寄存器
4.1.3  波特率计算步骤详解
4.1.4  单片机与计算机通信的简单例子
4.2  彻底理解串口通信协议           
4.3  串口隔离电路
4.4  计算机扩展串口(USB 转串口芯片CH340G)
4.5  RS485串行通信
4.6  SSI通信
4.6.1  SSI数据通信格式
4.6.2  SSI硬件电路
4.6.3  SSI软件实现
4.7 数据通信中的错误校验
4.7.1 校验和(CheckSum)与重要的串口通信实例  
4.7.2 CRC校验(全称:循环冗余码校验)        
4.8  单片机串口向计算机串口发送2进制、16进制、数值与字符串              
第5章  SPI通信
5.1  SPI总线数据传输格式       
5.1.1  接口定义
5.1.2  传输格式
5.2  SPI接口相关寄存器
5.2.1  SPI相关的特殊功能寄存器  
5.2.2  SPI接口引脚切换
5.3  SPI接口运用举例
第6章  I2C通信
6.1  I2C总线数据传输格式  
6.1.1  各个位的传输要求   
  6.1.2  多字节传输格式     
6.2  程序模块功能测试      
6.2.1 硬件仿真观察24C02读写结果(R/C时钟:22.1184MHz)
  6.2.2  硬件仿真观察24C32/64读写结果(R/C时钟:22.1184MHz)
6.3  24C02运用实例(断电瞬间存储整数或浮点数)         
第7章  单片机内部比较器与DataFlash存储器  
7.1  STC15W系列单片机内部比较器
7.1.1  比较器结构图
7.1.2  寄存器说明
7.1.3  电路讲解与程序实例
7.2  DataFlash存储器     
7.2.1  DataFlash操作有关的寄存器介绍
7.2.2  DataFlash操作实例(断电瞬间存储数据)
第8章  可编程计数阵列CCP/PCA/PWM模块(可用作DAC)
8.1  PCA模块总体结构图
8.2  PCA模块的特殊功能寄存器
8.3  PCA模块的工作模式与应用举例
第9章  模数转换器ADC
9.1  模数转换器ADC主要技术指标
9.2  使用单片机内部的10位ADC转换器
9.2.1、ADC相关的特殊功能寄存器
9.2.2、实例代码
9.3  12位ADC转换芯片MCP3202-B
9.4  16位ADC转换芯片ADS1110A0
9.5  18位ADC转换芯片MCP3421A0T-E/CH
第10章  数模转换器DAC
10.1  TLC5615数模转换电路与基本测试程序
10.2  TLC5615产生锯齿波、正弦波、三角波
10.3  TLC5615的高级运用(播放歌曲)
第11章  单片机实用小知识
11.1  复位
11.1.1  外部RST引脚复位
11.1.2  软件复位
11.1.3  内部低压检测复位
11.1.4  看门狗定时器复位
11.2  单片机的低功耗设计
11.2.1  相关寄存器说明
11.2.2  应用举例
11.3  单片机扩展32K外部数据存储器62256
11.3.1  电路讲解
11.3.2  软件测试实例
第12章  常用单片机接口程序  
12.1  数码管静态显示
12.2  数码管动态显示
12.3  独立键盘
12.4  矩阵键盘
第13章  1602液晶
13.1 1602液晶外形与电路图
13.2 1602液晶运用举例
13.3 1602液晶显示汉字与特殊符号
第14章  精密电压表\电流表\通用显示器\计数器制作
14.1  功能说明与电路原理分析
14.2  程序实例
14.2.1  通用显示器功能检测程序(外部程序)
14.2.2  计数器功能检测程序(外部程序)
14.2.3  模块程序
第15章  步进电机测试
15.1  步进电机特点
15.2  步进电机的3种励磁方式
15.3  步进电机驱动电路
15.4  步进电机驱动实例
15.5  步进电机专用驱动器介绍
第16章  频率检测
16.1  频率检测的用途与频率定义
16.2  频率检测实例
第17章  DS1302时钟芯片
17.1  DS1302的SPI数据通信格式
17.2  程序实例
第18章  红外通信   
18.1  红外通信电路与基本原理
18.2  红外接收软件实例
第19章  单总线DS18B20通信(长距离无线通信)
19.1  DS18B20运用基础
     19.1.1  单只DS18B20温度检测电路
     19.1.2  DS18B20通信时序
     19.1.3  DS18B20内部功能部件ROM、RAM、E2RAM、指令集
   19.1.4  读取温度步骤
19.2  单只DS18B20的温度检测实例
19.3  多只DS18B20的温度检测
     19.3.1 读取传感器代码实例
19.3.2  读取传感器温度实例
第20章  SD卡与znFAT文件系统
20.1  认识SD卡与SD卡驱动程序
20.1.1  认识SD卡
20.1.2  电路讲解
20.1.3  通信时序与完整驱动程序说明
20.2  znFAT文件系统
20.2.1  znFAT的移植方法
20.2.2  znFAT移植实例
第21章  MP3播放器实验(znFAT文件系统运用实例  
21.1  MP3介绍与电路讲解
21.2  正弦测试
21.3  通过SD卡播放MP3文件
第22章  数字存储示波器技巧与逻辑分析仪的操作
22.1  测量直流电源开关机瞬间输出毛剌浪涌
22.2  测量稍纵即逝的红外发射信号
22.3  精确测量直流电源纹波
22.4  示波器带宽选用依据
22.5  逻辑分析仪快速入门
附录   ASCII码表
参   考   文   献




相关帖子

沙发
无量寿经|  楼主 | 2015-8-18 12:58 | 只看该作者
这是最终的外观。

使用特权

评论回复
板凳
无量寿经|  楼主 | 2015-8-19 21:10 | 只看该作者
内 容 简 介
   本书以最新流行的不需要外部晶振与复位电路的可仿真的高速STC15系列单片机为核心,详细介绍了单片机内部功能模块,比如定时器、中断、串口、SPI接口、片内比较器、ADC转换器、可编程计数器阵列(CCP/PCA/PWM)等。每个重要知识点都有简短精炼的实例作验证,然后就是单片机常用外围接口的介绍与STC15系列单片机的实际产品运用实例分析。另外对单片机开发必须掌握的C语言基础知识与Keil开发环境也作了较为详细的介绍,对于没有学习过C语言的读者通过本书也能轻松进入以C语言开发单片机的学习状态。
    为了快速验证本书的理论知识,作者设计了与本书配套的双核(两个仿真型单片机)实验板,功能强大,操作简单,直观,除用于本书实验测试外,也可用于产品前期开发。
   本书可作为普通高校计算机类、电子类、自动控制类、仪器仪表类、机电一体化类等相关专业教学用书,对已有一定设计经验的单片机工程师也有重要参考价值。

使用特权

评论回复
地板
armxu| | 2015-8-20 15:49 | 只看该作者
对STC15W4特有的6路PWM没有说明和讲解。

使用特权

评论回复
5
无量寿经|  楼主 | 2015-8-20 21:49 | 只看该作者
是的,如果需要,那部分内容可结合芯片手册学习。

使用特权

评论回复
6
armxu| | 2015-8-20 22:18 | 只看该作者
红外部分没有讲编码发射,要是能结合STC-ISP上的PCA红外编码发射程序讲解就好了。另问PWM可用作38K载波吗?然后怎样调制编码?

使用特权

评论回复
7
无量寿经|  楼主 | 2015-8-21 18:56 | 只看该作者
自己做红外发射部分成本较高,按键、外壳处理非常麻烦,处理不好就不方便使用,远不如市场买个通用的遥控器方便,零售价不到5元钱,而且很省电。PWM可用作38K载波,调制过程也相对繁琐,有兴趣的可自己分享STC-ISP自带的那个红外调制发射程序。下图是我的开发板配带的遥控器(零售价不到5元)。


下图是配套开发板。


下图是遥控器控制开发板,开发板发数据到计算机的结果。

使用特权

评论回复
8
xyz549040622| | 2015-8-23 07:08 | 只看该作者
这是要在21ic送书的节奏么

使用特权

评论回复
9
autolog| | 2015-8-23 10:02 | 只看该作者
有电子版的吗?手头的书也一大堆了,

使用特权

评论回复
10
无量寿经|  楼主 | 2015-8-23 10:50 | 只看该作者
最近还忙,等空下来后会考虑送书活动。
有不说网友给我说书已经买了一麻袋了,我自己买的单片机书籍也有几十本,但仔细看,好书寥寥无几,即便是好书,介绍的内容也往往落后当今时代主流,比如好多书还在介绍AT89C51、STC89C52等,这都是10年前的技术。

使用特权

评论回复
11
无量寿经|  楼主 | 2015-8-23 10:51 | 只看该作者
无量寿经 发表于 2015-8-23 10:50
最近还忙,等空下来后会考虑送书活动。
有不说网友给我说书已经买了一麻袋了,我自己买的单片机书籍也有几 ...

有不少网友给我说书已经买了一麻袋了,

使用特权

评论回复
12
armxu| | 2015-8-23 17:01 | 只看该作者
你的书我已买了,还不错。强制转换有提到。

使用特权

评论回复
13
无量寿经|  楼主 | 2015-8-23 18:55 | 只看该作者
61页 是数据类型自动转换
63页 是数据类型强制转换

7、数据类型强制转换  
强制类型转换是将某一数据类型的变量值或表达式的值取出转换为指定的另一种数据类型,强制类型转换对原运算对象的数据类型和数值不产生影响,强制转换是用强制转换运算符进行的,强制转换运算符为:(类型名),由强制转换运算符组成的运算表达式的一般形式为:(类型名)表达式。  
比如:(float)a;     // 将a在内存中的值取出转换成浮点数
  (int)(x + y);  // 将(x + y)在内存中的值取出转换成带符号整数
    (float)x + y   // 将x在内存中的值取出转换成浮点数
例2.11 数据传递时自动转换与强制转换
#include "STC15W4K.H"           // 注意宏定义语句后面无分号
void main()
{  
    unsigned char a;
    unsigned long b;
    float c;
    for(;;)
    {
        b = 0x12345678;
        a = b;                  // 执行后a = 0x78,这里数据类型自动转换
        a = (unsigned char)b;   // 执行后a = 0x78,这里是数据类型强制转换
        c = a;                  // 执行后f =120.00(0x78=120),自动转换
        c = (float)a;           // 执行后c =120.00(0x78=120),强制转换     
    }
}
下例强制类型转换主要能让大家透彻理解指针的实际意义,可以在学完指针内容后再回来分析。
例2.12 强制类型转换实用技巧
//************** 强制类型转换实用技巧(地址类型转换)******************
//(A)将long型变量a(值:0x12345678)的第3个字节(值:0x56)赋给char型变量b。
// (B) 将数组的4个字节拼成1个long型变量
// (C) 将数组的4个字节转换成2个整数
// (D) 将数组的4个字节转换成1个float小数
// (E) 将float型变量各个字节取出
// (F) 将void型指针强制转换成任意类型指针
#include "STC15W4K.H"   // 注意宏定义语句后面无分号
unsigned long a;
unsigned char b;
int c,d;
unsigned char f1,f2;
float f;
void *p;     // 定义指向类型不明确的数据的指针(指针就是数据存放的地址)
unsigned char array[]={0x11,0x22,0x33,0x44};
struct stru
{
    int a;
    int b;
};
struct stru *pstru;       // 定义指向结构体的指针变量
void main()
{
    // ********************  长 整 型 转 字 符 型    ******************
    a=0x12345678;   
    b=((unsigned char *)&a)[2];    // 执行后b=0x56
    // 解释:长整型地址转字符型地址,(地址)[2],()是括号运算符,即先计算括号里面的内容,
    //       地址[2],表示取出当前地址加2地址中的内容。
    // ***********************  数 组 转 长 整型    *********************
    a=*((unsigned long *)array);    // 执行后a=0x11223344 (数组的名字就代表数组首地址)
    // 解释:数组型地址转长整型地址,*(地址),()是括号运算符,即先计算括号里面的内容,
    //       * 是取内容运算符。
    // ***********************  数 组 转 结 构 体    *********************
    pstru=(struct stru *)array;
    // 解释:数组型地址转结构体地址。pstru本来就是已定义好的专门存放地址的变量,即指针
    //     变量
    c=pstru->a;                 // 执行后c=0x1122
    d=pstru->b;                 // 执行后d=0x3344
    // 解释:使用"结构体变量地址->成员名"或"结构体变量名->成员名"的方法都可以访问结
    // 构体中的数据
    // ***********************  数 组 转 浮 点 型    *********************
    f=*((float *)array);           // 执行后f=0x11223344,对应小数是1.279534e-028
    // 解释:数组型地址转浮点型地址。
    // ***********************  数 组 转 字 符 型    *********************
    p=array;
    // 解释:数组型地址转空类型地址。
    b=((unsigned char *)p)[0];          // 执行后b=0x11
    // ***********************  浮 点 型 转 字 符 型  ********************
    f1=((unsigned char *)&f)[0];                // 执行后f1=0x11   
    // 解释:浮点型地址转字符型地址。
    //或f1=*(((unsigned char *)&f)+0);          // 执行后f1=0x11
    f2=((unsigned char *)&f)[1];                // 执行后f2=0x22   
    ((unsigned char *)&f)[0] ^= 0x80;           //  将4字节浮点数的符号位取反,注意^=书
    // 写不要错误
    // *******************  void 型 指 针 转 任 意 类 型 指 针*************
    p= array;
    f1= ((unsigned char *)p)[0];      // 执行后f1=0x11,访问数组中第1个字节的内容
}
代码解释:
&a  表示取出变量a在内存中的首地址(注意是long型变量,只能1次4个字节访问)。
(unsigned char *) 表示强制转换成char型地址(地址也叫指针),1次1个字节访问。
[2]               表示取出第2个字节中的内容。
a=array  取出数组首地址(数组的名字就是数组的首地址)
(unsigned long *) array将数组地址强制转换成long型地址(地址也叫指针)
a = *((unsigned long *) array)      // 取出long型地址中的内容
void *p    指针指向类型不明确的变量类型
2.1.4 变量存储空间(code、data 、bdata 、idata、xdata)

使用特权

评论回复
14
无量寿经|  楼主 | 2015-8-23 19:31 | 只看该作者
本帖最后由 无量寿经 于 2015-8-23 20:05 编辑

《51单片机轻松入门-基于STC15W4K系列》有辅助参考视频可下载,由于时间关系,视频讲得不详细,今后还会讲第二遍。
没有权限发链接,暂时不发了。

使用特权

评论回复
15
无量寿经|  楼主 | 2015-8-29 14:41 | 只看该作者
很多人问,零基础是否能学懂我的书,我只能说,如果小学都没毕业的人,肯定是光脑壳打阳尘——莫望,学习我的书需要有电路基础知识(至少认识常见的电子元件,比如电阻、电容、二极管、三极管等,能看懂简单的电路图),还必须有对单片机的浓厚兴趣。

使用特权

评论回复
16
李香兰| | 2015-8-30 10:14 | 只看该作者
这本书我看过,讲的还不错

使用特权

评论回复
17
无量寿经|  楼主 | 2015-9-1 22:28 | 只看该作者
给大家一个简单的例子练习下(keil C51环境),手工计算结果并说明计算依据,此例可简单测试下自己C语言是否基本学会了。
unsigned long a1,a2,a3,a4,a5;
unsigned char b=1;
unsigned char c=255;
unsigned int d=65535;
unsigned char e=255;
void main()
{
        while(1)
        {
                a1= b+c;      //  结果:a1=?
                a2=b+d;             //  结果:a2=?
                a3= b<<8;   //  结果:a3=?       
                a4=c*e*2;    //  结果:a4=?                  
        }
}

使用特权

评论回复
18
无量寿经|  楼主 | 2015-9-3 11:57 | 只看该作者
公布答案:
unsigned long a1,a2,a3,a4,a5;
unsigned char b=1;
unsigned char c=255;
unsigned int d=65535;
unsigned char e=255;
void main()
{
        while(1)
        {
                a1= b+c;   // 结果:a1=256, 相同长度数据类型运算,转换为长度更长的一个数据类型后运算,
                           // b,c都是unsigned char,转unsigned int
                a2=b+d;           // 结果:a2=0,不同长度数据类型运算,转换为长度最长的一个数据类型后运算,
                a3= b<<8;  // 结果:a3=256 ,相同长度数据类型运算,转换为长度更长的一个数据类型后运算,
                           // b,8都是unsigned char,转unsigned int       
                a4=c*e*2;  // 结果:a4=64514,相同长度数据类型运算,转换为长度更长的一个数据类型后运算,
                           // c,e都是unsigned char,转unsigned int        ,运算结果超int,所以错误。                  
        }
}

使用特权

评论回复
19
无量寿经|  楼主 | 2015-9-11 00:53 | 只看该作者
51单片机轻松入门—基于STC15W4K系列.pdf (2.56 MB)

使用特权

评论回复
20
无量寿经|  楼主 | 2015-9-29 21:23 | 只看该作者
《51单片机轻松入门-基于STC15W4K系列》内容节选:定时器0的基本运用,使用自动重装方式。

例3.1 用定时器T0实现P0.0引脚LED亮30ms灭30ms方式闪烁(使用查询方式),使用单片机内部R/C时钟,频率22.1184MHz。
#include "STC15W4K.H"
sbit  P0_0=P0^0;
void main()
{
    P0=0xff;            //关闭P0口接的所有灯
    TMOD=0x00;          // 定时器0的16位自动重装方式
    TH0=0x28;           // 定时器初值2800H
    TL0=0;
    TR0=1;
    for(;;)
    {
        if(TF0)         // 如果TF0等于1
        {   
            TF0=0;      // 清TF0        
            P0_0=!P0_0; // 执行灯亮或灭的动作
        }
    }
}

使用特权

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

本版积分规则

5

主题

91

帖子

1

粉丝