第四周(20110322)

上次课程要点:

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关于指针类型的特殊点

Leave a Comment