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

📄 main.c

📁 电子秤,能显示重量,设置重量,超量程报警
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#define  uint unsigned int           //定义uint为无符号整型
#define  uchar unsigned char         //定义uchar为无符号字符型
sbit SDO5513 = P2^2;
sbit CLK5513 = P2^3;
sbit CS5513 = P2^0;
sbit ACC7 = ACC^7;
sbit ACC0 = ACC^0;
struct{
         unsigned char top;
         unsigned char mid;
         unsigned char low;
        }
RegDat;
void ReadCS5513(void);
uchar ReceiveByte5513(void);
void delayms(uchar j);               //声明延时函数
uchar getkey(void);                  //声明扫描函数
void keydisp(uchar k);               //声明显示函数
void beep();                         //蜂鸣器
void scan_key(void);
void setup(void);                    //设置程序
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};  //共阳数码管0-F显示代码
uchar code dispcode[]={0xFE,0xFD,0xFB,0xF7}; //数码管片选 
uchar dispbuf[4]={0,0,0,0};
uchar key,key1,keypos,dispbitcount;
bit alarmflag; 
void change(unsigned char *p,unsigned char count) 
{ 
         while(count>0) 
         { 
          *(p+count)=*(p+count-1); 
           count--; 
         } 
}
void main(void)
{
        TMOD=0x01; 
        TH0=(65536-4000) / 256; 
        TL0=(65536-4000) % 256; 
        TR0=1; 
        ET0=1; 
        EA=1; 
         while(1)
         {
         scan_key();
         if(key1==10) setup(); 
         }
}
void delayms(uchar j)    //延时子程序
       {
         uchar n,m,k; 
         for(n=j;n>0;n--) 
         for(m=2;m>0;m--) 
         for(k=248;k>0;k--); 
       }
uchar getkey(void)      //扫描取键值程序
       {
        uchar rcode,ccode;
        P1=0xf0;
        if((P1&0xf0)!=0xf0)
        {
         delayms(20);   //为消除抖动,延时20ms
         if((P1&0xf0)!=0xf0)
         {
          rcode=0xfe;   //开始发行扫描信号
          while((rcode&0x10)!=0)
          {
         P1=rcode;
           if((P1&0xf0)!=0xf0)
           {
            ccode=(P1&0xf0)|0x0f;
            do{;}while((P1&0xf0)!=0xf0); //当松键后显示
            return((~rcode)+(~ccode));    //返回扫描代码
           }
           else rcode=(rcode<<1)|0x01; //此行无键按下,变化行扫描信号
          }
         }
        }
        return 0;   //无键按下,返回0
       }

       void keydisp(uchar k)    //显示程序
       {
        switch(k)
        {
         case 0x11:key1=0;break;      //0键
         case 0x21:key1=1;break;      //1键
         case 0x41:key1=2;break;      //2键
         case 0x81:key1=3;break;      //3键
         case 0x12:key1=4;break;      //4键
         case 0x22:key1=5;break;      //5键
         case 0x42:key1=6;break;      //6键
         case 0x82:key1=7;break;      //7键
         case 0x14:key1=8;break;      //8键
         case 0x24:key1=9;break;      //9键
         case 0x44:key1=10;break;     //设定键
         case 0x84:key1=11;break;     //确定键
         case 0x18:key1=12;break;     //取消键
         case 0x28:key1=13;break;     //去皮/清零
         case 0x48:key1=14;break;     //样本键
         case 0x88:key1=15;break;     //开机键
         default:break;
        }
      }
void setup(void)
{
while(1)
{
scan_key();
if ((key1>=0) && (key1<10)) 
{ 
keypos++; 
if(keypos<4) 
{ 
change(dispbuf,keypos); 
dispbuf[0]=key1;
} 
else 
{ 
keypos=4; 
} 

//设定
}
if (key1==11) break;
}
}
void scan_key(void)
{
key=getkey();
delayms(20);
keydisp(key);
}
void t0(void) interrupt 1 using 0 

{ 
  TH0=(65536-4000) / 256; 
  TL0=(65536-4000) % 256; 
  P0=table[dispbuf[dispbitcount]]; 
  P2=dispcode[dispbitcount]; 
  dispbitcount++; 
  if (dispbitcount==4) 
    { 
      dispbitcount=0; 
    } 
} 
unsigned char ReceiveByte5513(void)
      {
       unsigned char i;
       ACC=0;
       for(i=8;i>0;i--)
       {
       CLK5513=1;
       _nop_();_nop_();
       _nop_();_nop_();
       _nop_();_nop_();
       ACC=ACC<<1;
       ACC0=SDO5513;
       CLK5513=0;
       _nop_();_nop_();
       _nop_();_nop_();
       _nop_();_nop_();
        } 
        return(ACC);
      }
void ReadCS5513(void)
      {
       CS5513 = 0;
       do{_nop_();CLK5513=0;SDO5513=0;}while(SDO5513!=0);
       RegDat.top = ReceiveByte5513();
       RegDat.mid = ReceiveByte5513();
       RegDat.low = ReceiveByte5513();
       CLK5513 = 0;
       CS5513 = 1;
      }





⌨️ 快捷键说明

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