汉扬编程 编程大纲 子牙篇(1)单片机C语言中文编程方法探讨

子牙篇(1)单片机C语言中文编程方法探讨

用中文进行C语言编程始终是一个有争议的话题:首先是能不能,能意味是中国自己的编译器。其次是方不方便,这个就各人有各人的看法了。本篇对51单片机C语言中文编程的相关问题做一些探讨。

子牙篇(1)单片机C语言中文编程方法探讨

下面以一个8个LED发光二极管左右闪动的单片机程序为例:

行号 C语言英文程序

11 // ==== 系统定义 ==============================

12 sfr LED_Port = 0xA0;

13 sfr IE = 0xA8;

14 sbit EA = IE^7;

15

16 // —- 延时函数 ————–

17 void DelayMS(unsigned int MS) {

18  unsigned int i, j, k;

19

20   for (k=0; k<MS; k++) {

21    i=9;

22    do {

23     j = 100;

24     while (–j);

25    } while (–i);

26   }

27

28 }

29

30 // ==== 任务函数 ==========================

31 void My_Task(unsigned int TM, unsigned char DT) {

32

33   LED_Port=DT;

34   DelayMS(TM);

35

36 }

37

38 // ==== main ==========================

39 void main(void) {

40

41 // —- 系统设置 —————–

42   EA = 0;

43

44 // —- 系统初始化 —————–

45   LED_Port=0xF0;

46   DelayMS(1000);

47   LED_Port=0x0F;

48   DelayMS(1000);

49

50 // —- Main_Loop —————–

51 Main_Loop:

52   My_Task(500, 0x55);

53   My_Task(500, 0xAA);

54   goto Main_Loop;

55

56 }

这是一个很平凡的8051单片机C语言英文程序,对于STC89Cxx系列和STC8xx系列的单片机都适用,只是LED闪动的速度不同。这个程序用Keil编译器很容易通过,通常作为入门课程教学。对于STC15xx系列单片机,对于P2=0xA0端口要增加将它设置为准双向输入输出工作模式的语句。

这个程序里第17行到28行是延时函数定义,第31到36行是任务函数定义,第45行到48行先左边4个LED亮,后右边4个LED亮。最后第51行到54行形成一个无限循环,8个LED相邻两个交替发光。

为了探讨中文编程,以其坐而论道,不如提供实际例子来供大家评论。下面是一个与上英文程序对应的8051单片机C语言中文程序,可以用某个51单片机编译器编译通过,运行效果与英文一致。

行号 C语言中文程序

11 // ==== C语言关键词替换 ==============================

12 #define 跳转到 goto

13 #define 固定循环 for

14 #define 无符号整数 unsigned int

15 #define 无符号字符 unsigned char

16 #define 空值 void

17 #define 主函数 main

18 #define 不定循环条件 while

19 #define 不定循环开始 do

20 #define 特殊功能寄存器 sfr

21 #define 特殊位寄存器 sbit

22 #define 等于 =

23

24 // **** 以下是中文编程 *************

25 // ==== 系统定义 ==============================

26 特殊功能寄存器 LED端口 等于 0xA0;

27 特殊功能寄存器 中断SFR 等于 0xA8;

28 特殊位寄存器 中断总开关 等于 中断SFR^7;

29

30 // —- 延时函数 ————–

31 空值 毫秒延时(无符号整数 毫秒) {

32  无符号整数 循环指标2, 循环指标3, 循环指标1;

33

34   固定循环 (循环指标1 等于 0; 循环指标1<毫秒; 循环指标1++) {

35    循环指标2 等于 9;

36    不定循环开始 {

37     循环指标3 等于 30;

38     不定循环条件 (–循环指标3);

39    } 不定循环条件 (–循环指标2);

40   }

41

42 }

43

44 // ==== 任务函数 ==========================

45 空值 我的_任务(无符号整数 延时, 无符号字符 数据) {

46

47   LED端口 等于 数据;

48   毫秒延时(延时);

49

50 }

51

52 #define 1秒钟 1000

53 #define 间隔时间 500

54

55 // ==== 主函数 ==========================

56 空值 主函数(空值) {

57

58 // —- 系统设置 —————–

59   中断总开关 等于 0;

60

61 // —- 系统初始化 —————–

62   LED端口 等于 0xF0;

63   毫秒延时(1秒钟);

64   LED端口 等于 0x0F;

65   毫秒延时(1秒钟);

66

67 // —- 主循环开始 —————–

68 主循环开始:

69   我的_任务(间隔时间, 0x55);

70   我的_任务(间隔时间, 0xAA);

71   跳转到 主循环开始;

72

73 }

(1)用中文进行编程碰到的第一个决策是对于C语言的语法关键字是用中文还是用英文。其实这不重要,因为C语言有宏定义功能。

这里使用的编译器是用英文做关键字,所以第12行到22行将本程序用的一些英文的关键字宏定义为中文的关键字,在编译的过程中自然会被恢复为英文的,编译器能够正确的识别。

同样,如果某种中文计算机语言的关键字是中文,你看它很不顺眼,你也可以反过来用宏定义把它们定义为英文的试试。

(2)在中文C语言里,数值常数怎么办,像第26行,是写成中文的一百六十,还是写成阿拉伯数值160?如果写成中文,十六进制数怎么表达?

所以我个人觉得在中文C程序中数值表示就用传统的阿拉伯数字算了,毕竟商场里的价格也是阿拉伯数字表示的。

(3)像第32行,在中文C语言中变量名可以用中文字,这个大家都应该认可的,毕竟现实中数量、单价和总计这种变量名大家都可以接受。

(4)可能有争议的是像第52行,宏定义名以及变量名可以用字符0~9开头吗?

(5)其实中文C语言编译器最难实现的是中文流分词问题。像第38和39行的“–”减一算符,它和后面的中文之间不需要空格,可以被编译器正确识别。但是如果要用中文,就必须加空格,写成“减一 循环指标3”的形式。

在上面这个中文C语言程序中,有大量的空格被用来分隔各个语法词,这样看起来很不像中文文章,有点不习惯。

好了, 中文 C语言 就 介绍 到 这里, 想 听到 没有 编过 程序 的 人 怎么 看。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6683.html

利用C语言编程单片机,制作可以根据环境光照调整亮度的智能灯

夏天最爱这碗面,清爽开胃不长胖,粗粮细做营养健康,太好吃了

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部