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

📄 yh_t3_new.lst

📁 电子秤源程序。去年的心血啊!c语言编写的51单片机程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   YH_T3_NEW                                                             04/28/2007 10:16:51 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE YH_T3_NEW
OBJECT MODULE PLACED IN yh_t3_new.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE yh_t3_new.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************
   2          说明:
   3          1.该程序适用于高精度的场合
   4          2.关于如何借鉴保加利亚程序的原则:
   5                  首先,如果能完全看懂,则将原汇编程序改写为C程序;
   6                  其次,如果大部分能看懂,则仍模仿汇编程序的
   7                                          结构和流程,改写。那些不懂的细节可以自己编写
   8                                          或者干脆暂时省略,以后出了问题再补充。
   9                  最后,如果大部分看不懂,则自己创造,自己编写,
  10                                          同时借鉴汇编程序中可以看得懂的部分,以后出了
  11                                          问题再完善和补充。
  12          *********************************/
  13          /********************************
  14          注意事项:
  15          1.对AT24C02进行多次写操作时,中间必须相隔5ms
  16          2.乘法运算时,乘数必须和积的数据类型相统一。
  17                  注意:不同的数据类型进行运算时,极易出现隐蔽性的差错。
  18                  要么定义为相同的数据类型,要么使用强制转换。
  19                  另外,涉及到乘法运算时,存在着运算过程中,某个被乘数
  20                  的变量的内容被“非法”修改的现象。
  21                  如果碰上这种情况,重新赋值就可以了。
  22                  通过单步调试来发现这个隐形杀手。
  23                  
  24          3.我们使用的晶振是11.0592M,不是12M,所以定时是不准确
  25                  的,存在误差。
  26          4.DATA的128个字节不能全部占用,因为堆栈也需要占用DATA
  27                  的空间。因此可以将占用空间最大的数组存放在IDATA,
  28                  其余变量都默认存放在DATA即可。 
  29          5.制约响应速度的原因有两个:排序数组的长度和5460的
  30                  输出速率。
  31          6.CS5460A的偏置校准数据一旦写入偏置校准寄存器,要断电
  32                  之后该寄存器的数据才消失。当然如果,每次运行程序都
  33                  写入偏置校准数据,可能也不需要断电。    
  34          7.单位转换中的克与英镑的转换存在bug,当秤的精度变大
  35                  时会出现问题。示数的最高位与小数点的位置可能不正确
  36          8.AT24C02的页面写操作存在不能超越当前page(8个字节);
  37             顺序写操作则没有这种限制。
  38          9.分度值的改变牵连很广,包括:重量值的计算,精度,
  39                  数值的符号的产生,长期稳定旗标。  
  40          10.      
  41          *********************************/
  42          
  43          
  44          /********************************
  45          功能上的欠缺:  
  46          1.还是校准完成后马上可以称重,比较人性化,但是代码
  47                  可能会大量增加,因为,称重那部分很可能要重复。
  48                  以后再尝试。
  49                  也不一定,不妨尝试一下,我感觉应该也没有多少难度,
  50                  代码也不会增加多少。
  51                  建议方法:将菜单部分设计成一个庞大的函数。
  52                                                          通过在称重循环结尾处查询组合键是否按下
  53                                                          调用菜单函数。设定完成后通过break跳出
  54                                                          菜单的循环,继续称重。
  55                                                          当然读取24c02部分可能会重复。也
C51 COMPILER V7.50   YH_T3_NEW                                                             04/28/2007 10:16:51 PAGE 2   

  56                                                          可能不会。现炒现卖。
  57                                                          暂时不用。
  58          2.应该添加防震功能。
  59          3.传说中的LCD亮度调节,就是背光亮度的调节,只要在硬件
  60                  上调整相应的电阻就可以了。
  61                  至于软件调节肯定要使用专门的液晶或者增加相关的硬件
  62                  电路。
  63          4.低电压报警模块应该并不难,但是,如果想要显示电压的
  64                  数值则比较困难。要研究耀华T3的电路和软件才能解决。
  65          5.目前没有hold功能,因为按键不够!
  66          6.
  67          7.      
  68          8.我所使用的背光模块是一种手动背光,必须进行菜单设置。
  69                  今后可能要考虑自动背光以及真正的手动按键控制背光。
  70          9.
  71          ***************************************************/
  72          
  73          
  74          /*************************************************
  75          目前存在的问题
  76          问题一:现在的背光电路有一个不爽的地方,开机就亮!
  77                                          建议方法:背光电路之前加一个三极管作为反相器
  78                                          就可以了。      
  79          问题二:如果没有单位转换,小数点位置的变换会很简单,
  80                                          有单位转换,可能很麻烦。        
  81          问题三:        
  82          问题四:
  83                                          
  84          问题五:T2作为波特率发生器,仿真失败;有可能是keil
  85                                          本身的模拟串口存在问题,不支持T2。如果进行
  86                                          实际的线路连接可能会成功。
  87                                          暂时使用T1作为串口波特率发生器;使用T0和T2
  88                                          实现延时5分钟的功能。   
  89          问题六:
  90          问题七:串口模块中,由于目前的示数的正负旗标:f_minus
  91                                          的局限性,当示数为0时,串口输出的数据会出现
  92                                          +0和-0两种情况。不过影响也不大,暂时不管它。                                                                                                                  
  93          **************************************************/
  94          
  95          
  96          /***************************            
  97          思路一:菜单所包含的内容暂时有以下几个:
  98                                          分度值选择、小数点的位置、波特率、背光开关
  99                                          
 100                                          、量程选择、校准、校准砝码。
 101                                          先模仿T3,归零范围选择和零点跟踪选择以后再说。                          
 102          思路二:        
 103          思路三:新建LCD编码数组的过程中可能修改了某些数据,
 104                                          也不会出错,但是看着不爽。如果见到就改回来。
 105                                          
 106          思路四:原来使用的sort函数中后来被去掉的部分应该有一定
 107                                          的防震功能。考虑一下是否恢复。
 108                                          在某个时间段之内的短暂的AD变化不去取样。
 109                                          建议方法:保加利亚程序中,在排序部分,那种间隔取值的
 110                                          方法研究一下。这种方法,在相同的排序数组长度
 111                                          的情况下,牺牲一部分时间,即LCD的变化速率
 112                                          翻倍,如果数组的长度是25,则称对瞬间冲力的忽略
 113                                          时间可达1~2秒。
 114                                          只要忽略时间达到2秒,防震功能就马马虎虎了。
 115                                          暂时不用,以后再说,因为我的RAM和ROM的空间
 116                                          都很有限。      
 117          思路五:                                                        
C51 COMPILER V7.50   YH_T3_NEW                                                             04/28/2007 10:16:51 PAGE 3   

 118          思路六:在菜单这部分,考虑使用位域,因为变量的值都
 119                                          比较小,即使使用最小的uchar也有点浪费。
 120                                          或者使用枚举
 121          思路七:尽量减少变量,尽量减少全局变量。宁可增加子函数
 122                                          中的局部变量也要减少全局变量和主函数中的变量。
 123          思路八:
 124          思路九:                        
 125          思路十:考虑延时自动关机功能。也不复杂,只要在
 126                          时间到了之时,对OFF脚(P1.4)置零就能达到
 127                          关机的目的。
 128          思路11:考虑分段校准。表头项目成功生产后再考虑提高。
 129          思路12:                        
 130          思路13:                                
 131          思路14:
 132          思路15:通过对比汇编产生的代码的多少,进行深层次的
 133                                          优化。                                                                                                                                                          
 134          ******************************/
 135          #include <reg52.h>
 136          #include <intrins.h>
 137          //----------------------
 138          //以下是自定义的数据类型
 139          #define uchar  unsigned char
 140          #define uint   unsigned int
 141          #define ulong  unsigned long
 142          struct AFEI
 143                                   {
 144                                                  ulong ad;
 145                                                  uchar times;
 146                                   };                      
 147          //--------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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