?? text1.c
字號:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar i,j,count,m,f,s,key_number,key0,key1,key2,key3,key4,key5;
/**************子函數定義****************************/
void long_delay(void);
void short_delay(void);
void delay10ms(uchar);
void write7279(uchar,uchar);
uchar read7279(uchar);
void send_byte(uchar);
uchar receive_byte(void);
void keyunit(void); //按鍵及顯示測試
void init_time0(void);//定時器賦初值函數
void display7279();//顯示函數
void kongzhi();//進位控制函數
/**************端口初始化**************************/
sbit key=P3^4;
sbit dat=P3^5;
sbit clk=P3^6;
sbit cs=P3^7;
/***********7279指令初始化*************************/
#define DEC0DE0 0x80 //采用譯碼方式0
#define DEC0DE1 0xc8 //采用譯碼方式1
#define CMD_READ 0x15 //讀鍵盤的數據指令
#define UNDEC0DE 0x90 //不譯碼
main()
{
init_time0();
while(1)
{ kongzhi();
display7279();
keyunit();
}
}
/************************************************
7279寫入函數
**********************************************/
void write7279(uchar cmd,uchar dta)
{
send_byte(cmd);
send_byte(dta);
}
/*************************************************
7279讀取函數
**************************************************/
uchar read7279(uchar command)
{
send_byte(command);
return(receive_byte());
}
/*************************************************
7279發送字節函數
***************************************************/
void send_byte(uchar out_byte)
{
uchar i;
cs=0;
long_delay();
for(i=0;i<8;i++)
{
if(out_byte&0x80)
{
dat=1;
}
else
{
dat=0;
}
clk=1;
short_delay();
clk=0;
short_delay();
out_byte=out_byte*2;
}
dat=0;
}
/***************************************************
7279接受字節函數
******************************************************/
uchar receive_byte(void)
{
uchar i,in_byte;
dat=1;
long_delay();
for(i=0;i<8;i++)
{
clk=1;
short_delay();
in_byte=in_byte*2;
if(dat)
{
in_byte=in_byte|0x01;
}
clk=0;
short_delay();
}
dat=0;
return(in_byte);
}
/***************************************************
7279長延遲函數
****************************************************/
void long_delay(void)
{
uchar i;
for(i=0;i<0x30;i++);
}
/***************************************************
7279短延遲函數
*****************************************************/
void short_delay(void)
{
uchar i;
for(i=0;i<8;i++);
}
/***************************************************
10ms延遲函數
****************************************************/
void delay10ms(uchar time)
{
uchar i;
uint j;
for(i=0;i<time;i++)
for(j=0;j<0x390;j++);
}
void init_time0(void)
{ TMOD=0X01;
TH0=19456/256;
TL0=19456%256;
TR0=1;
ET0=1;
EA=1;
}
void int0() interrupt 1{count++;
if(count==20){m++;count=0; }
TH0=0x4c;
TL0=0x00;
}
void display7279()
{if(key0==0)
{TR0=1;EA=1;
write7279(0x98,0xff);
write7279(DEC0DE1+0,m%10);
write7279(DEC0DE1+1,m/10);
write7279(DEC0DE1+2,f%10);
write7279(DEC0DE1+3,f/10);
write7279(DEC0DE1+4,s%10);
write7279(DEC0DE1+5,s/10);
}
}
void keyunit(void)
{ key_number=0xff;
if(!key)
{ TR0=0;EA=0;
key_number=read7279(CMD_READ);
if(key_number==0x00)
{key0++;while(!key); }
switch(key0)
{case 1:
{
write7279(DEC0DE1+0,m%10); write7279(DEC0DE1+1,m/10);write7279(DEC0DE1+5,0x5);
write7279(DEC0DE1+4,0Xe);write7279(DEC0DE1+3,0Xc);write7279(0x98,0xfb);
if(key_number==0x05)
{ m++;write7279(DEC0DE1+0,m%10);write7279(DEC0DE1+1,m/10);while(!key);}
if(key_number==0x04)
{ if(m>0)m--;write7279(DEC0DE1+0,m%10);write7279(DEC0DE1+1,m/10);while(!key);}
}break;
case 2:
{
write7279(DEC0DE1+0,f%10);write7279(DEC0DE1+1,f/10);write7279(DEC0DE1+5,0xf);
write7279(DEC0DE1+4,0Xe);write7279(0x98,0xf3);
if(key_number==0x05)
{ f++;write7279(DEC0DE1+0,f%10);write7279(DEC0DE1+1,f/10);while(!key);}
if(key_number==0x04)
{if(f>0) f--;write7279(DEC0DE1+0,f%10);write7279(DEC0DE1+1,f/10);while(!key);}
}break;
case 3:
{
write7279(DEC0DE1+0,s%10);write7279(DEC0DE1+1,s/10);write7279(DEC0DE0+5,0x0c);
write7279(DEC0DE1+4,0X0); write7279(UNDEC0DE+3,0X3e); write7279(0x98,0xfb);
if(key_number==0x05)
{ s++;write7279(DEC0DE1+0,s%10);write7279(DEC0DE1+1,s/10);while(!key);}
if(key_number==0x04)
{if(s>0) s--;write7279(DEC0DE1+0,s%10);write7279(DEC0DE1+1,s/10);while(!key);}
}break;
default:if(key0>3) key0=0;
}
}
}
void kongzhi()
{if(f>60||f<0)f=0;
if(m>60||m<0)m=0;
if(s==0x18) { s=0;f=0;m=0;}
if(f==0x3c) {s++;f=0x0;}
if(m==0x3c) {f++;m=0x0;}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -