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

📄 yh_t3_new.lst

📁 电子秤源程序。去年的心血啊!c语言编写的51单片机程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
             --
 148          //以下是HT1621模块的定义和声明
 149          #define     BIAS_COM     0x29//0X52               //LCD 1/3偏压(bias) , 4公共口(com)。
 150          //#define     RC256        0x18//0X30               //System clock source选择on-chip RC oscillator(256k)
 151                                                                                                                                                                                                                  //这条指令可以不要,因为1621上电默认的就是选择片内的RC256振荡器
 152          #define     SYSTEN       0x01//0X02               //Turn on system oscillator(打开系统的振荡器)
 153          #define     SYSDIS       0x00//0X00               //Turn off both system oscillator and LCD bias generator
             -(全关)
 154          #define     LCDON        0x03//0X06               //Turn on LCD
 155          #define                 LCDOFF                   0x02   //关闭LCD
 156          #define                 BUZON                            0x09//打开蜂鸣器
 157          #define                 BUZOFF                   0x08//关闭声音
 158          #define                 F_2K                             0x60//声音频率为2K
 159          #define                 F_4K                             0x40//声音频率为4K                     
 160          uchar code ID_CMD=0x04; 
 161          uchar code ID_WR=0x05;
 162          void wr_id(uchar id);
 163          void wr_addr(uchar addr);
 164          void wr_byte_1621(uchar dat_or_cmd);
 165          void cmd_1621(uchar cmd);
 166          void reset_1621(void);
 167          void off_on_lcd(void);
 168          void display_1621(void);
 169          void alarm(uint time);
 170          void delay_nms(uint n);
 171          void delay_nus(char n);
 172          //以上是HT1621的字型编码表,包括0-9,A、C、E、F、全部不显示、全部显示。
 173          //uchar code discode[16]={0xbe,0x06,0x7c,0x5e,0xc6,0xda,0xfa,0x0e,0xfe,0xde,0xee,0xb8,0xf8,0xe8,0x00,0xff}
             -;
 174          uchar code discode_num[10]={0xbe,0x06,0x7c,0x5e,0xc6,0xda,0xfa,0x0e,0xfe,0xde};
 175          //以下是26个大写字母对应的HT1621的编码,为了方便查询,数组定义为27个字节,其中,首字节为特殊符号“=”的编
             -码。
C51 COMPILER V7.50   YH_T3_NEW                                                             04/28/2007 10:16:51 PAGE 4   

 176          //以下是26个字母在数组中对应的下标。
 177          //A-1,B-2,C-3,D-4,E-5,F-6,G-7,H-8,I-9,J-10,K-11,L-12,M-13,N-14;
 178          //O-15,P-16,Q-17,R-18,S-19,T-20,U-21,V-22,W-23,X-23,Y-25,Z-26;
 179          uchar code discode_cap[27]={0x50,0xee,0x00,0xb8,0x00,0xf8,0xe8,0x00,0xe6,0x00,0x00,0x00,0xb0,0x00,0x00,0xb
             -e,0xec,0x00,0x00,0xda,0x00,0xb6,0x00,0x00,0x00,0x00,0x00};
 180          uchar code discode_low[27]={0x50,0x00,0xf2,0x70,0x76,0x00,0x00,0xde,0xe2,0x00,0x00,0x00,0x00,0x00,0x62,0x7
             -2,0xec,0xce,0x60,0x00,0xf0,0x32,0x00,0x00,0x00,0xd6,0x00};
 181          //定义一个HT1621显示数据缓冲区,初始化全部为0x00。
 182          uchar dis_zone[6]={0x00,0x00,0x00,0x00,0x00,0x00};
 183          sbit dt_1621=P2^4;   //LCD显示的数据。
 184          sbit cs_1621=P2^5;   //使能。
 185          sbit wr_1621=P2^6;   //写信号。
 186          sbit BL=P1^6;//背光引脚,为1,背光亮;
 187                                                                                                  //为0,背光灭           
 188          //------------------------------------
 189          //以下是CS5460的变量定义和函数声明
 190          sbit reset_5460=P1^0;
 191          sbit sdo_5460=P1^1;
 192          sbit sclk_5460=P1^2;
 193          sbit sdi_5460=P1^3;
 194          void cmd_5460(uchar cmd);
 195          ulong read_5460(void);
 196          void write_5460(ulong dat);
 197          ulong buf_5460;
 198          //-----------------------------------
 199          //以下是串口的函数声明
 200          /*********************************
 201                  串口帧信息格式:一帧10位,
 202                                          其中第1位:起始位“0”
 203                                                          第10位:停止位“1”
 204                                                          中间8位:数据位
 205          注意:一帧虽然在时序上有十位,包含起始位和停止位。
 206                                  但是,向sbuf赋值的实际上只有中间的8位数据位。                                           
 207          ********************************/               
 208          /********************************
 209          LCD显示的重量信息100.00Kg
 210          串口发送的数据:”00.001 “,注意:最后的空格表示正号。
 211          LCD显示的重量信息-35.000Kg
 212          串口发送的数据:”000.53-“,注意:最后的"-"表示负号。
 213          包含小数点和符号,共7位数据。并且二者的顺序恰好相反
 214          另外:重量数字中高位为零不显示的情况,传送时按0发送
 215                                  凑够位数。
 216          
 217          
 218          
 219          *******************************/                                                                                                
 220          void send_byte(uchar txd);
 221          /******************************
 222          //常用的ASCII码:               0       :48
 223                                                                                          =:61  
 224                                                                                          .       :46
 225                                                                                          -:45
 226                                                                                          g       :103
 227                                                                                          K       :75
 228                                                                          空格” “:32
 229          ******************************/ 
 230          //------------------------------------
 231          //以下是定时器(计数器)的管脚定义和函数声明
 232          /************************************
 233          为了实现延时5分钟,     T0作为16位定时器
 234                                                                                          T1作为16位计数器        
 235          ************************************/
C51 COMPILER V7.50   YH_T3_NEW                                                             04/28/2007 10:16:51 PAGE 5   

 236          sbit CLK_COUNTER0=P3^4;
 237          void delay_5min(void);
 238                                                                  
 239          //------------------------------------
 240          //以下是AT24c02的相关变量和函数
 241          uchar   code READ=0xa1;         // 器件地址以及读取操作
 242          uchar   code WRITE=0xa0;                // 器件地址以及写入操作
 243          sbit SDA=P2^1;                  // IIC数据
 244          sbit SCL=P2^2;                  // IIC时钟
 245          void start(void);
 246          void stop(void);
 247          void ack(void);
 248          void not_ack(void);
 249          void write(uchar data_wr);
 250          //void wr_byte(uchar addr_sla,uchar addr_wr,uchar data_byte);
 251          void wr_nbyte(uchar addr,void *p_arr,uchar n);
 252          //void wr_page(uchar addr_wr);
 253          uchar rd_cur(void);
 254          void rd_seq(uchar addr_rd,void *p_bufrd,uchar n);
 255          //ulong rd_long(uchar addr_rd);
 256          ulong idata buf_24c02_AD[2];                                                                                                                                                                                                    
 257          /*****************************
 258          数组buf_24c02_rd[]中相应位置的数据含义:
 259                                                                          0——分度值
 260                                                                          1——小数点位置
 261                                                                          2——波特率
 262                                                                          3——背光                                                               
 263          *****************************/
 264          uchar idata buf_24c02_4B[4];//用来存储从24c02中读取的数据,
 265                                                                                                                          //随后就用来存储将要向24c02中写入的数据
 266                                                                                                                          //目的:1.在菜单状态下,显示当前的设定
 267                                                                                                                                                  //2.在称重状态下,获取设定信息
 268                                                                                                                                                  //      用于显示和计算。        
 269          //下面数组的用途:
 270          //第一个:量程;第二个:校准砝码的重量
 271          ulong idata buf_24c02_2L[2];
 272          //--------------------------------------------
 273          //电池电压检测部分的变量定义和函数声明。
 274          sbit PD=P1^5;
 275          void alarm_low(void);
 276          
 277          
 278          //--------------------------------------------
 279          
 280          //下面的数据是针对3公斤传感器(1.5Kg校准,没有偏置校准)
 281          //电流通道增益PGA=50
 282          //这种情况下,AD值太大,因此将从5460读出的数据
 283          //在原来的基础上缩小为原来的1/4
 284          //校准的AD平均值增量是:76477
 285          #define N_5460 500  //表示5460的转换周期
 286          //注意:下述带参数的宏定义中的x表示量程的AD平均值增量
 287          #define ZERO_POS(x) ((x)/5)     //表示零点范围上限:+20%
 288          //#define ZERO_NEG(x) ((-1)*((x)/25))   //表示零点范围下限:-4%,这两个百分比都是以校准的AD平均值增量为分
             -母的。
 289          #define ZERO_NEG(x) (((-x)/25))         //表示零点范围下限:-4%,这两个百分比都是以校准的AD平均值增量为分母的。
 290          #define MANU_ZERO_POS(x) ((x)/50)       //表示手动归零范围上限:+2%
 291          //#define MANU_ZERO_NEG(x) ((-1)*((x)/50))      //表示手动归零范围下限:-2%,这两个百分比都是以校准的AD平均值
             -增量为分母的。
 292          #define MANU_ZERO_NEG(x) ((-x)/50)      //表示手动归零范围下限:-2%,这两个百分比都是以校准的AD平均值增量为分
             -母的。
 293          #define AUTO_ZERO_POS(x) ((x)/200)      //表示自动归零范围上限:+0.5%
 294          //#define AUTO_ZERO_NEG(x) ((-1)*((x)/200))     //表示自动归零范围下限:-0.5%,这两个百分比都是以校准的AD平

⌨️ 快捷键说明

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