?? 89s521.c
字號(hào):
#include<reg51.h> //包含常用頭文件
#include<stdio.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char //定義常用數(shù)據(jù)類型
void scan_key(void);
void treat_with_key(void);
void fun0(void);
void fun1(void);
void fun2(void);
void delay(int t);
void unit(void);
void give_led_data(void);
char data seg[3]={0x7F,0xBF,0xDF};
char data dis[10]={0x05,0xf5,0x13,0x51,0xe1,0x49,0x09,0xd5,0x01,0x41};
// 0 1 2 3 4 5 6 7 8 9
unsigned char code sine_data[128]={0x80,0x86,0x8D,0x93,0x99,0x9F,0xA5,0xAB,
0xB1,0xB7,0xBC,0xC2,0xC7,0xCC,0xD1,0xD6,
0xDA,0xDF,0xE3,0xE7,0xEA,0xEE,0xF1,0xF4,
0xF6,0xF8,0xFA,0xFC,0xFD,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0xFD,0xFB,0xF9,0xF7,
0xF5,0xF2,0xEF,0xEC,0xE9,0xE5,0xE1,0xDD,
0xD8,0xD4,0xCF,0xCA,0xC5,0xBF,0xBA,0xB4,
0xAE,0xA8,0xA2,0x9C,0x96,0x90,0x89,0x83,
0x80,0x79,0x72,0x6C,0x66,0x60,0x5A,0x55,
0x4E,0x48,0x43,0x3D,0x38,0x33,0x2E,0x29,
0x25,0x20,0x1C,0x18,0x15,0x11,0x0E,0x0B,
0x09,0x07,0x05,0x03,0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x02,0x04,0x06,0x08,
0x0A,0x0D,0x10,0x13,0x16,0x1A,0x1E,0x22,
0x27,0x2B,0x30,0x35,0x3A,0x40,0x45,0x4C,
0x51,0x57,0x5D,0x63,0x69,0x6F,0x76,0x7C, };
uchar key=0,wave_way=0,add_dec=1,j,n=0,m=0,k=0,l=0,led_data0,led_data1,led_data2;
int i=0;
main()
{
unit();
give_led_data();
while(1)
{
scan_key();
if(key!=0)
{
treat_with_key();
}
}
}
/**********************************************/
void unit(void)
{
IP=0xc2;
ET0=0;
TR0=0;
ET1=0;
TR1=0;
TH0=0x7d;
TL0=0x7d;
TH1=0xdc;
TL1=0xd8;
TMOD=0x12;
TR0=1;
ET0=1;
TR1=1;
ET1=1;
EA=1;
}
/**********************************************/
void give_led_data(void)
{
if(wave_way==0)
{
switch(add_dec)
{
case 1:
{
led_data0=dis[0];
led_data1=dis[0];
led_data2=dis[8];
break;
}
case 2:
{
led_data0=dis[0];
led_data1=dis[0];
led_data2=dis[4];
break;
}
case 3:
{
led_data0=dis[0];
led_data1=dis[7];
led_data2=dis[2];
break;
}
case 4:
{
led_data0=dis[0];
led_data1=dis[0];
led_data2=dis[2];
break;
}
default:{break;}
}
}
if(wave_way==1)
{
switch(add_dec)
{
case 1:
{
led_data0=dis[0];
led_data1=dis[6];
led_data2=dis[1];
break;
}
case 2:
{
led_data0=dis[3];
led_data1=dis[8];
led_data2=0xff;
break;
}
case 3:
{
led_data0=dis[7];
led_data1=dis[5];
led_data2=0xff;
break;
}
case 4:
{
led_data0=dis[2];
led_data1=dis[4];
led_data2=0xff;
break;
}
default:{break;}
}
}
if(wave_way==2)
{
switch(add_dec)
{
case 1:
{
led_data0=dis[1];
led_data1=dis[7];
led_data2=0xff;
break;
}
case 2:
{
led_data0=dis[7];
led_data1=dis[3];
led_data2=0xff;
break;
}
case 3:
{
led_data0=dis[5];
led_data1=dis[2];
led_data2=0xff;
break;
}
case 4:
{
led_data0=dis[8];
led_data1=dis[1];
led_data2=0xff;
break;
}
default:{break;}
}
}
}
/**********************************************/
void scan_key(void)
{
key=(~P1)&0x07;
if(key!=0)
{
delay(150);
key=0;
if(((~P1)&0x07)!=0)//while(((~P1)&0x07)!=0)//用while(((~P0)&0x0f)!=0)則每按一下鍵彈起后加一,而用if(((~P0)&0x0f)!=0)則按下鍵后就自加
key=(~P1)&0x07;
}
}
/**********************************************/
/***************ms延時(shí)函數(shù)**********************/
void delay(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
/**********************************************/
/**********************************************/
void treat_with_key(void)
{
switch(key)
{
case 1:{fun0();give_led_data();break;}
case 2:{fun1();give_led_data();l=add_dec;break;}
case 4:{fun2();give_led_data();l=add_dec;break;}
default:{break;}
}
}
/**********************************************/
/**********************************************/
void fun0(void)
{
wave_way++;
if(wave_way==3)
{
wave_way=0;
}
}
/**********************************************/
void fun1(void)
{
add_dec++;
if(add_dec==5)
{
add_dec=1;
}
}
/**********************************************/
void fun2(void)
{
add_dec--;
if(add_dec==0)
{
add_dec=5;
}
}
/**********************************************/
/**********************************************/
void timer1(void) interrupt 1
{
if(wave_way==0)
{
ET0=0;
TR0=0;
TH0=0x00;
TL0=0x00;
TMOD=0x12;
TR0=1;
m++;
if(m==2*add_dec)
{
P0=0x00;
}
if(m==4*add_dec)
{
m=0;
P0=0xff;
}
ET0=1;
EA=1;
}
if(wave_way==1)
{
ET0=0;
TR0=0;
TH0=0x13;
TL0=0x13;
TMOD=0x12;
TR0=1;
k++;
if(k<=10*add_dec)
{
j=j+4;
P0=j;
}
if(k>=10*add_dec)
{
j=j-4;
P0=j;
}
if(k==20*add_dec){P0=0x00;j=0;k=0;}
ET0=1;
EA=1;
}
if(wave_way==2)
{
ET0=0;
TR0=0;
TH0=0xc8;
TL0=0xc8;
TMOD=0x12;
TR0=1;
l--;
if(l==0)
{
P0=sine_data[i];
i++;
l=add_dec;
if(i==128){i=0;}
}
ET0=1;
EA=1;
}
}
/**********************************************/
void timer3(void) interrupt 3
{
ET1=0;
TR1=0;
TH1=0xdc;
TL1=0xd8;
TMOD=0x12;
TR1=1;
n++;
switch(n)
{
case 1:
{
P3=seg[0];
P2=led_data0;
break;
}
case 2:
{
P3=seg[1];
P2=led_data1;
break;
}
case 3:
{
P3=seg[2];
P2=led_data2;
n=0;
break;
}
default:{break;}
}
ET1=1;
EA=1;
}
/******************************************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -