上次课程要点:
1、程序排错时的注意点: 先处理第一个错误、改正后要重新编译
2、典型问题: 大小写、缺分号、没有生成hex、没有将源文件加入project
3、比较难发现的问题:变量溢出、#define中的错误、逻辑错误
4、培养良好的程序风格:缩进、注释、命名
5、C51数据类型:字节数、取值范围、符号;新增:bit、sbit、sfr、sfr16
6、MCS-51单片机的存储区域与存储模式
复习和热身:P54页的小程序
#include <reg51.h> /* * 延时 * t: 延时时间,单位ms */ void Delay(unsigned int t) { unsigned char i; while(t!=0) { t--; for(i=120;i>0;i--); } } sbit P1_0=0x90; // 定义P1口的P1.0引脚 sbit P1_1=P1^1; // 定义P1口的P1.1引脚 sbit P1_2=0x90^2; // 定义P1口的P1.2引脚 void main( void ) { unsigned int i; // 定义无符号整型变量i,用于循环延时 P1=0x00; // 关闭接在P1口的所有发光二极管 do { P1_0 = ~P1_0; // 将sbit型变量P1_0取反 P1_1 = ~P1_1; // 将sbit型变量P1_1取反 P1_2 = ~P1_2; // 将sbit型变量P1_2取反 Delay(1000); // 延时1秒 }while(1); }
教一招书上没有的
既然Delay()经常用到,能不能象printf()一样?
程序分模块有什么好处?
自己动手完成P76页的实训程序
不一定完全照书上,建议参考我们前几次课优化过的程序:
#include <reg51.h> /* * 延时 * t: 延时时间,单位ms */ void Delay(unsigned int t) { unsigned char i; while(t!=0) { t--; for(i=120;i>0;i--); } } void main( void ) { unsigned char code LEDMAP[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char i; for (;;) { for (i=0;i<8;i++) { P1=LEDMAP[i]; Delay(500); /* 延时500ms */ } } }
要点:
1、为不同的花样建立数组(2-16进制转换)
2、如何优化程序?
导入: 数组、指针、函数
C51语法概要
教材P60
运算符与表达式
运算符要点:优先级、=和==、 &和&&
指针的本质
数组与指针的关系
字符串与指针的关系
C51关于指针类型的特殊点
…