⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme2.txt

📁 嵌入式点菜系嵌入式点菜系统源码供参考c51c51统源码供参考嵌入式点菜系统源码供参考c51c51c51c51
💻 TXT
📖 第 1 页 / 共 2 页
字号:
/************************* C-51(128k)程序开发说明 *************************/

在阅读此文件之前, 请先看 readme1.txt

/* 目录和文件 */
\C51\BIN        可执行文件(*.EXE)
\C51\LIB        运行库文件(*.R03)
\C51\INCLUDE    头文件(*.H)
\C51\SOURCE     C和汇编源文件(*.C,*.S03,*.XCL,*.DOC)
\c51\example    子目录下有抄表机的例程(包括电,气抄表), 其*.doc文件为使用说明.

开发或实验时,通讯程序请调用THJ32.EXE (38400波特率)
在WINDOWS环境下的DOS界面使用THJ32.EXE时若出现问题时,请在WINDOWS起动时进入
DOS界面再使用THJ32.EXE.


/* 开发步骤 */
1.安装:在机器硬盘上建立C51目录,把开发工具软盘的内容拷贝到该目录.
2.环境设置:运行C51目录下的AUTO.BAT,也可以将该文件中的设置加到根目录下的
  AUTOEXEC.BAT文件里.设置后源程序就可以在自定义的工作目录下开发,以下默认
  工作目录为C:\C51\SOURCE
3.编辑:可用任何不带排版格式的编辑器(如:EDIT)编写C51源程序,扩展名为*.C
4.编译:在工作目录下键入:
  C97 程序名(不带扩展名) [Enter]
5.连接:若编译通过,则键入:
  L97 程序名(不带扩展名) [Enter]
  连接成功后生成扩展名*.HEX文件
6.转换:
  HEXOBJ 程序名(不带扩展名) [Enter]
  转换后生成*.OBJ文件,即是要下装到手持机里的目标程序.下装的方法请查询随机的
  <<使用说明>>.

/* C-51编程的注意事项 */
1.在变量定义时,C-51新增了三个扩展语言关键字:
  ①code
    ROM空间,用来存放常数表格等不需变化的数据.举例:
    code char *d={"程序开发说明"};
  ②xdata
    外部RAM空间,此种变量用来存放临时变量,数组等.举例:
    xdata int i,j;
    xdata char c,s[10];
    xdata struct [结构名]{
      ...
      ...
    }[变量名或数组名];
    注意:程序中用xdata定义的所有变量存放在外部RAM地址00DAH开始的地方,该设置
         在文件hncc.xcl中"-Z(XDATA)C_ARGX,X_UDATA,X_IDATA,ECSTR,RF_XDATA=DA"
  ③no_init
    掉电保护RAM空间,用于存放掉电仍需保护的数据.在本机器中也是指外部RAM.开始
    地址为C000H,该设置在文件hncc.xcl中"-Z(XDATA)NO_INIT=C000".用户可以根据需
    要修改设置.

2.在定义数组的大小时应将字符串结束符'\0'考虑进去,否则若引起RAM地址冲突可能会
  产生不可预料的结果.例如:取时间函数gettime(s),返回的是8个字符长的时间串,加
  上结束符'\0'共9个字节长,故定义s的大小时至少是9个字节.

3.C51编译程序对微机常规内存的大小有一定要求,如果常规内存空间不够,编译时会出
  现内存不够的提示:
  "  * * *    C O M P I L E R    O U T    O F    M E M O R Y    * * *  "
  事实上当C源程序较大时,这种情况是经常发生的.解决办法有两个:
  ①.调整微机常规内存,使它尽可能大.
     (在程序很大时,该方法并不是最终的解决办法.)
  ②.将C源程序分成两个或两个以上的源程序,分别编译,然后一起连接.具体过程为:
       * 主程序文件用程序C97.BAT编译
       * 其它源文件作为附加程序用C97LIB.BAT编译成库
       * 将新库名加入L97.BAT的命令行中
         xlink -f HNCC %1 [新库名] HNCCL cl8051l -o %1.hex -x -l %1.map
       * 连接
       * 转换
     例如:源程序包括:主程序demo.c和附加程序demo1.c,demo2.c共三个文件.
       * C97 demo
       * C97LIB demo1
         C97LIB demo2
       * 将文件L97.BAT改为:
         xlink -f HNCC %1 demo1 demo2 HNCCL cl8051l -o %1.hex -x -l %1.map
       * L97 demo
       * HEXOBJ demo
     注意:在主程序和附加程序中,如果其中一个程序用到了另一个程序中定义的
          变量,那么在该程序中应把该变量说明为外部引用.例如:
          /*demo.c*/
          int i,j;
          /*demo1.c*/
          extern i,j;

4.熟悉数据分配情况在许多时候是很有必要的。在这一版本的编译系统中,采用大
  模式进行编译,所有的变量及数据都存放在外部RAM中,地址从0000H到FFFFH。变
  量在该区域存放的首地址可以根据需要和可能由编程人员进行调整,即调整连接
  配置文件HNCC.XCL。以下为该文件的说明:
   -! 定义CPU类型 -!
   -c8051
   -! 设置各种由XDATA定义的变量的存储地址从0116H开始。-!
   -Z(XDATA)C_ARGX,X_UDATA,X_IDATA,ECSTR,RF_XDATA=116
   -! 设置由NO_INIT声明的变量的存储地址从C000H开始。 -!
   -Z(XDATA)NO_INIT=C000
  以上两个起始地址0116H和C000H都是可以根据实际需要进行调整的,但要注意的
  是地址空间0000H-0116H在系统程序中已用到,所以在应用程序中不应再用。另外,
  从上位机下装的数据库在外部RAM中固定从起始地址1000H开始存放,注意变量地
  址不要与之冲突。在执行了L97.BAT连接程序后,除生成*.HEX目标程序外,还会生
  成映象文件*.MAP。在该映象文件中可以看到最终的(变量)数据存储情况。

/* C-51自定义函数说明 */
一.键盘接口函数
1.char key(xdata char k)
  功能:等待从键盘输入一个ASCII字符或汉字.
  参数:k        为0,按键无回显;非0,按键带回显(显示位置为当前光标位置)
  返回:字符的ASCII码或汉字内码的第一字节,内码的第二字节放系统变量NM2.

2.char keys(xdata char *s)
  功能:从键盘接收一串字符或汉字,带回显.
  参数:s        键值缓冲区指针
  返回:输入字符串的实际长度
  说明:①在按键输入字符串的过程中,如果输错可以按[清除]键删除上一输入,按[确认]
       键后退出接收.且自动在串s的末尾加结束符0x00,故该函数接收的串可以直接
       用"putstr(s);"显示出来.
       ②输入字符在换行时的行距以及回显可能会受显示状态(函数screen())的影响.
       ③该函数支持最大256个字符的输入.

3.char keysn(xdata char *s,xdata char n)
  功能:从键盘接收一串字符或汉字,带回显.
  参数:s        串值缓冲区指针
       n        接收的有效字符长度
  返回:输入字符串的实际长度
  说明:与函数keys()的区别是,如果实际接收的字符数小于n,则在剩余位置补上空格
       符0x20.该函数不支持长字符串输入,最多16个字符.

4.char keysm(xdata char *s,xdata char n)
  功能:从键盘接收一串字符或汉字,输入长度不能超过n.
  参数:s        串值缓冲区指针
       n        接收串的最大长度
  返回:输入字符串的实际长度
  说明:输入时的回显受函数screen()的影响,若为字符状态(screen(0)),回显为半高
       字符.若为汉字状态(screen(1)),回显为全高字符.

5.char keygo(void)
  功能:查询键盘是否有键按下,不等待.
  返回:有键按下返回键值,无按键返回0.

二.显示接口函数
1.void screen(xdata char bz);
  功能:设置显示状态
  参数:bz       0--字符状态
                1--汉字状态
  说明:在用函数putn()显示外RAM字符串时,如果字符串中有汉字,则应该在调用putn()
       之前将显示状态设为汉字状态,即:screen(1);

2.void cls(void)
  功能:清屏

3.void clsn(xdata char lin,xdata char n)
  功能:清除屏幕上从lin行开始的n行显示.
  参数:lin     要清除的起始行号(1--16)
       n       清除的行数(1--16) 

4.void moveto(xdata char x,xdata char y)
  功能:移动光标
  参数:x        行(1--16)
       y        列(1--16)

5.char getx(void)
  功能:返回当前光标的行号(1--16)

6.char gety(void);
  功能:返回当前光标的列号(1--16)

7.void putch(char c)
  功能:显示一个字符.
  参数:c        字符ASCII码

8.void putstr(char *s)
  功能:显示一串字符或汉字.
  参数:s        字符串指针
  说明:如果串中有汉字,应先将显示状态置为'汉字状态'(screen(1)),
       参数s可以是指向CODE区的指针,或是指向XDATA区的指针.串中可以带'\n'参数
       作为换行符.串应以\0结束.
  举例:  ①putstr("汉字显示");
         ②xdata char s[8];
           gettime(s);
           putstr(s);

9.void putn(xdata char n,xdata char *s)
  功能:显示n个字符或汉字.
  参数:n        字符数
       s        指向XDATA区的指针
  说明:如果串中有汉字,应先将显示状态置为'汉字状态'(screen(1)),
       一个汉字算两个字符.
  举例:  xdata char s[9];
         goto(1,1);
         putstr("当前时间:");
         gettime(s);
         putn(8,s);

10.void putch_h(char c)
  功能:显示一个字符.
  参数:c        字符ASCII码
  说明:该函数与putch()的唯一区别是显示的字符是全高字符.

11.void putstr_h(char *s)
  功能:显示一串汉字或字符.
  参数:s        字符串指针
  说明:该函数与putstr()的唯一区别是显示的字符是全高字符.  

12.void putn_h(xdata char,xdata char *)
  功能:显示n个字符或汉字.
  说明:该函数与putn()的唯一区别是显示的字符是全高字符.

13.void setdot(xdata char x,xdata char y)
  功能:点亮屏幕上某一点.
  参数:x        行坐标(1--128)
       y        列坐标(1--128)

14.void clrdot(xdata char x,xdata char y)
  功能:清除屏幕上某一点.
  参数:x        行坐标(1--128)
       y        列坐标(1--128) 

15.void xscc(xdata char *)
  功能:显示一个长字符或汉字串(超过一屏).
  说明:该函数自带翻屏功能.按[↑].[↓]键翻屏,按[F2]键退出.

三.蜂鸣器与时钟接口函数
1.void bell(xdata char t)
  功能:蜂鸣器响
  参数:t        时长(1--16)

2.void gettime(xdata char *t)
  功能:取时间
  参数:*t       hh.mm.ss(时.分.秒)形式的字符串,8个字符.      

3.void getdate(xdata char *d)
  功能:取日期
  参数:*d       yy.mm.dd(年.月.日)形式的字符串,8个字符.

4.void settime(xdata char *t)
  功能:设置时间
  参数:*t       hh.mm.ss(时.分.秒)形式的字符串,8个字符.
  举例:设置时间为12时5分5秒
       settime("12.05.05");
    或:xdata char s[10];
       ...
       gets(s);
       settime(s);

5.void setdate(xdata char *d)
  功能:设置日期
  参数:*d       yy.mm.dd(年.月.日)形式的字符串,8个字符.

四.IC卡接口函数
1.void poweron(void)
  功能:卡上电
  说明:用于所有卡类型

2.void poweroff(void)
  功能:卡下电
  说明:用于所有卡类型

3.char cardtest(void)
  功能:检测卡是否到位
  返回:为0,已插卡;非0,未插卡.
  说明:用于所有卡类型

4.void cardtype(xdata char t)
  功能:设置卡类型
  参数:t        卡类型,说明如下:
       #define  SIM441828       0
       #define  SIM443242       1
       #define  ATMEL16K        2
       #define  AT24C64         3
       #define  AT24C01         4

5.char cardcomp(xdata char l,xdata char *c)
  功能:IC卡密码比较
  参数:l        密码长度
       c        密码串
  返回:返回比较是否正确(0--密码正确;1--密码错误).
       另外系统变量VIC中存放IC卡密码'错误计数器'的值.
  说明:用于SIM441828,SIM443242卡.
       密码串c可以是一个指针变量,也可以是一个确定的串.
  举例:①xdata char s[10];
         ...
         poweron();
         cardtype(SIM441828);
         keys(s);
         cardcomp(4,s);
         poweroff();
         ...
       ②...
         poweron();
         cardtype(SIM443242);
         cardcomp(6,"372147");
         poweroff();
         ...

6.void cardread(xdata char pag,xdata char adr,xdata char len,xdata char *s)
  功能:读卡
  参数:pag      页号
       adr      地址偏移量(0-255)
       len      读数据的长度(1-256)
       *s       欲放数据的缓冲区指针
  说明:用于SIM441828(4页),SIM443242(1页),ATMEL16K(8页),AT24C64(32页)卡.

7.void cardwrit(xdata char pag,xdata char adr,xdata char len,xdata char *s)
  功能:写卡
  参数:pag      页号

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -