📄 main.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 + -