📄 kt.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define schar signed char
#define uint unsigned int
//define data
#define NTH1D 0xF4 // MODE 1 4MHz: 0FAH 6MHZ: 0FBH 2.5MS
#define NTL1D 0xD0 // 12MHZ: 2.85MS= 2850=B30H=-F4D0H
#define KSETD 0X01 // set button
#define KMOVED 0x02 // move bit button
#define KUPD 0x03 // add 1 button
#define KDOWND 0x04 // subtract 1 button
//define bit
sbit RCLKB =P1^0 ; // A0
sbit A1B =P1^1 ; // A1
sbit SRCLKB=P1^2 ; // A2
sbit SERB =P1^3 ; // A3
sbit GB =P1^4 ; // G=1 out is high ,G=0 out is admit
sbit KEYB =P1^5 ;
bit SHINE ; // LED shine
bit BANK ;
//all x
uchar data Keysigne, // which key down
Keysigne1,
Disbit, // display bit
Kled, // signe LED contrl shine
N, // contrl shine time
Pn0; // contrl point
schar data C2; // sub 1
uchar Tfxtest;
uint F, // 濒率
FN,
PP; // 相位
//function list
void first(void); // first send data
void key(void); // key deal
// void display(void);
void delay(uint m);
void keydelay(void); // 去抖
void sudr(void); // set up down reset
void set(void);
void move(void);
void up(void);
void down(void);
void high(void); // clear high bit 0
void rehigh(void); // recover high 0
void disbuft(void);
void deal(uint m,uint n);
// point define
uchar code *p;
uchar data *pd;
//arange define
uchar data disbuf[8]={10,2,3,4,5,6,7,8}; // display is area
uchar data disbuff[8]={0,0,0,0,11,12,10,10}; // display is area
uchar data disbufp[8]={0,0,0,0,11,12,10,10}; // display is area
//uchar code tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0}; //0-9
uchar code tab[]={0XFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0};
uchar code tabf[]={0XFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0,0x6e,0x8e};
uchar code tabp[]={0XFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0,0x6e,0xce};
//T1 MODE 1 2.85S
void timer1(void) interrupt 3 using 1 // T=0.544ms 12MHZ
{
uchar data x1,save;
GB=1; // clear display
TH1=NTH1D;
TL1=NTL1D;
KEYB=1;
if(KEYB==0)
{ Keysigne=Disbit; } // 取键
if((C2==Disbit)&&(SHINE==1)) save=0;
else save=p[pd[Disbit]&0xef];
if(Pn0==Disbit) save=save|0x80;
if(Disbit==8) save=Kled;
// send data to display
RCLKB=0;
for(x1=0;x1<8;x1++) // send data to 74HC595
{
SRCLKB=0;
save=save<<1;
SERB=CY; // send 1 bit to SER
SRCLKB=1; // low-to-high
}
RCLKB=1; // send 8 bit to 74HC595 save
P1=P1&0xf0;
P1=P1|Disbit;
GB=0;
Disbit+=1;
if(Disbit==9) Disbit=0;
if(++N==100) { SHINE=0; } // LED shine contrl
if(N==200) { N=0; SHINE=1; }
}
void main(void)
{
first();
F=5555; PP=90;
FN=F/2;
deal(F,PP);
Pn0=4;
pd=disbuf;
p=tab;
while(1)
{
high();
key();
}
}
void first(void)
{
TMOD=0X10;
TH1=NTH1D;
TL1=NTL1D;
ET1=1;
EA=1;
TR1=1;
P0=0XFF;
P1=0xff;
P2=0XFF;
P3=0XFF;
Kled=0;
SHINE=0;
BANK=0;
C2=0xff;
Keysigne1=0;
Pn0=0xff;
}
void key(void)
{
keydelay();
if(Keysigne==0) { return; }
delay(3500); // first push delay
keydelay();
if(Keysigne!=KSETD) { return; }
keydelay();
while(Keysigne)
keydelay(); // 等待键放开
Kled=0x20; // set led
BANK=1;
pd=disbuff;
p=tabf;
rehigh();
C2=3;
while(BANK)
{
sudr();
}
Kled=0;
C2=0XFF;
high();
pd=disbuf;
p=tab;
disbuft();
}
void keydelay(void)
{
uint j1=1200;//1430;
Keysigne=0;
KEYB=1;
while(--j1)
{
_nop_(); _nop_();
_nop_(); _nop_();
}
}
void sudr(void)
{
while(Keysigne==0) {keydelay(); Keysigne1=Keysigne;}
while(Keysigne) keydelay();
if(Keysigne1==KUPD) up();
while(Keysigne==0) {keydelay(); Keysigne1=Keysigne;}
while(Keysigne) keydelay();
if(Keysigne1==KDOWND) down();
while(Keysigne==0) {keydelay(); Keysigne1=Keysigne;}
while(Keysigne) keydelay();
if(Keysigne1==KMOVED) move();
while(Keysigne==0) {keydelay(); Keysigne1=Keysigne;}
while(Keysigne) keydelay();
if(Keysigne1==KSETD) set();
}
void set(void)
{
BANK=0;
F=disbuff[0]*1000+disbuff[1]*100+disbuff[2]*10+disbuff[3];
FN=F/2;
PP=disbufp[1]*100+disbufp[2]*10+disbufp[3];
deal(F,PP);
}
void move(void)
{
++Tfxtest;
if(Tfxtest==1) {p=tabp;pd=disbufp;}
if(Tfxtest==2) {p=tabf;pd=disbuff;Tfxtest=0;}
}
void up(void)
{
--C2;
if(C2==-1) C2=3;
}
void down(void)
{
++pd[C2];
if(pd[C2]==10) pd[C2]=0;
}
void delay(uint m)
{
while(--m)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
}
void high(void)
{
if(disbuf[0]==0)
{
disbuf[0]=10;
if(disbuf[1]==0)
{
disbuf[1]=10;
if(disbuf[2]==0) disbuf[2]=10;
}
}
}
void rehigh(void)
{
if(disbuf[0]==10)
{
disbuf[0]=0;
if(disbuf[1]==10)
{
disbuf[1]=0;
if(disbuf[2]==10) disbuf[2]=0;
}
}
}
void disbuft(void)
{
disbuf[0]=disbuff[0];
disbuf[1]=disbuff[1];
disbuf[2]=disbuff[2];
disbuf[3]=disbuff[3];
disbuf[4]=disbufp[0];
disbuf[5]=disbufp[1];
disbuf[6]=disbufp[2];
disbuf[7]=disbufp[3];
}
void deal(uint m,uint n)
{
uchar data b0,b1,b2,b3,b4;
uint div=1000;
disbuf[0]=m/div;
m%=div;
div/=10;
disbuf[1]=m/div;
m%=div;
div/=10;
disbuf[2]=m/div;
m%=div;
disbuf[3]=m/div;
div=1000;
disbuf[4]=n/div;
n%=div;
div/=10;
disbuf[5]=n/div;
n%=div;
div/=10;
disbuf[6]=n/div;
n%=div;
disbuf[7]=n/div;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -