?? 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 + -