📄 led菜单程序.c
字号:
#include"reg52.h"
#include "intrins.h"
#include "stdio.h"
#include "ctype.h"
#include "string.h"
#define RESET_ADD 0x02
#define RESET_CODE 0x01
#define LEFTMOV_ADD 0x03
#define LEFTMOV_CODE 0
#define LEFTCYC_ADD 0x03
#define LEFTCYC_CODE 0x01
#define RIGHTMOV_ADD 0x03
#define RIGHTMOV_CODE 0x02
#define RIGHTCYC 0x03
#define RIGHTCYC 0x03
#define SYSOFF_ADD 0x04
#define SYSOFF_CODE 0x00
#define SYSON1_ADD 0x04
#define SYSON1_CODE 0x01
#define SYSON2_ADD 0x04
#define SYSON2_CODE 0x03
#define SYSON3_ADD 0x04
#define SYSON3_CODE 0x07
#define DSP_ADD 0x05
#define DSP_CODE 0x0a
#define BCD_ADD 0x05
#define BCD_CODE 0x80
#define TWINKLE_ADD 0x06
#define TWINKLE_CODE 0x00
#define DIG0 0x08
#define DIG1 0x09
#define DIG2 0x0a
#define DIG3 0x0b
#define DIG4 0x0c
#define DIG5 0x0d
#define DIG6 0x0e
#define DIG7 0x0f
#define NOKEY 0
#define MENU 0x7b
#define CLEAR 0x7f
#define OK 0x7c
#define UP 0x7d
#define DOWN 0x7e
#define CODE0 0x7e
#define CODE1 0x28
#define CODE2 0x5b
#define CODE3 0x6b
#define CODE4 0x2d
#define CODE5 0x67
#define CODE6 0x77
#define CODE7 0x2e
#define CODE8 0x7f
#define CODE9 0x6f
#define CODEF 0x17
#define CODEU 0x7c
#define CODE_ASK 0x1b
#define CODEd 0x79
#define CODEA 0x3f
#define CODES 0x67
#define CODEN 0x3e
#define CODEY 0x1d
#define CODEo 0x71
#define CODE_ 0x01
#define CODEh 0x35
#define POINT 0x80
#define year 0x10
#define month 0x11
#define date 0x12
#define hours 0x13
#define minutes 0x14
#define seconds 0x15
#define weekday 0x16
sbit B0=B^0;
sbit B1=B^1;
sbit B2=B^2;
sbit B3=B^3;
sbit B4=B^4;
sbit B5=B^5;
sbit B6=B^6;
sbit B7=B^7;
sbit CH451_DCLK=P0^0;
sbit CH451_DIN=P0^1;
sbit CH451_LOAD=P0^2;
sbit CH451_DOUT=P0^3;
sbit SC=P0^5;
sbit SD=P0^4;
sbit VF_INT1=P3^3;
sbit VF_T1=P3^5;
sbit AD7705_DIN=P2^1;
sbit AD7705_DOUT=P2^1;
sbit AD7705_CLK=P2^0;
sbit AD7705_DRDY=P2^2;
bit renew_dis_key_flag;
union int_char
{
signed int signed_int;
unsigned int unsigned_int;
unsigned char c[2];
};
union long_int
{
signed long signed_long;
unsigned long unsigned_long;
unsigned int unsigned_int[2];
unsigned char c[4];
};
unsigned char key,time_data,time,timer,time1,time2,time3,fre,z,last_key,y,m1,m2,k,j,j1,j2,j3,j4,l,k,d,r0,r1,r2,r3,r4,r5,second,display_state,time_hou,time_min,time_month;
unsigned char keydata[8]={0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0};
unsigned char dig0[8]={0,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char uled[10]={CODE0,CODE1,CODE2,CODE3,CODE4,CODE5,CODE6,CODE7,CODE8,CODE9};
unsigned char dled[8]={CODE0,CODE1,CODE2,CODE2,CODE2,CODEU,CODE2,CODE2};
unsigned char dig[8]={DIG0,DIG1,DIG2,DIG3,DIG4,DIG5,DIG6,DIG7};
unsigned int last_counter,delta_counter,frequency;
data union int_char r,e,x,counter,fo;
/*-----------------------------------*/
void CH451_WRITE(unsigned char uadd,unsigned char ux,unsigned char dadd,unsigned char dx) /*写CH451*/
{
CH451_DIN=0;CH451_DIN=1;
B=dx; /*写要写入第二个CH451数据的数据段*/
CH451_DIN=B0;CH451_DCLK=0;CH451_DCLK=1; /*时钟上升沿有效*/
CH451_DIN=B1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B2;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B3;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B4;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B5;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B6;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B7;CH451_DCLK=0;CH451_DCLK=1;
B=dadd; /*写要写入第二个CH451数据的地址段*/
CH451_DIN=B0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B2;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B3;CH451_DCLK=0;CH451_DCLK=1;
B=ux; /*写要写入第一个CH451数据的数据段*/
CH451_DIN=B0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B2;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B3;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B4;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B5;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B6;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B7;CH451_DCLK=0;CH451_DCLK=1;
B=uadd; /*写要写入第一个CH451数据的地址段*/
CH451_DIN=B0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B2;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=B3;CH451_DCLK=0;CH451_DCLK=1;
CH451_LOAD=0;CH451_LOAD=1; /*加载数据*/
}
/*---------------------------------------------------*/
char CH451_READ() /*读CH451,当有键按下时,从DOUT口串行读出数据*/
{
CH451_DIN=0;CH451_DIN=1;
CH451_DIN=1;CH451_DCLK=0;CH451_DCLK=1; /*发送两个字节,将第二个CH451高四位送入7,通知其读键值*/
CH451_DIN=1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=1;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_DIN=0;CH451_DCLK=0;CH451_DCLK=1;
CH451_LOAD=0;CH451_LOAD=1; /*加载数据*/
B7=0; /*读键值,并将其存入B寄存器中*/
B6=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B5=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B4=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B3=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B2=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B1=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
B0=CH451_DOUT;CH451_DCLK=0;CH451_DCLK=1;
if(B6==0)B=0; /*如果键值为释放时的值,将B清零*/
return B;
}
/*-------------------------------------------------------*/
void timer0(void) interrupt 1 /*中断T0*/
{
TH0=0xd0;
second++;
if(second>49)
{
second=0;
counter.c[0]=TH1;counter.c[1]=TL1;
if(counter.c[0]!=TH1){counter.c[1]=TL1;counter.c[0]=TH1;}
delta_counter=counter.unsigned_int-last_counter;
last_counter=counter.unsigned_int;
} /*计8次返回*/
timer++;
if(timer<8)return; /*计8次返回*/
timer=0;renew_dis_key_flag=1;
}
/*------------------------------------------------------------*/
char dis_code(char x) /*将十进制数转换为数码管显示码值*/
{
switch(x)
{
case 0:return CODE0;
case 1:return CODE1;
case 2:return CODE2;
case 3:return CODE3;
case 4:return CODE4;
case 5:return CODE5;
case 6:return CODE6;
case 7:return CODE7;
case 8:return CODE8;
case 9:return CODE9;
default:return 0;
}
}
/*------------------------------------------------------------*/
display_led()
{
unsigned char i;
for(i=0;i<8;i++)
{
CH451_WRITE(dig[i],uled[i],0,0);
}
}
/*-----------------------------------------------------*/
void write_IIC(unsigned char x)
{
char i;
B=x;
i=8;
do
{
SD=B7;
SC=1;_nop_();_nop_();B=B<<1;
SC=0;_nop_();_nop_();
i--;
}
while(i!=0);
SD=1;
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SC=0;
_nop_();_nop_();
}
/*--------------------------------------------------------*/
void write_8583_byte(unsigned char address,unsigned char x)
{
SD=1;
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SD=0;
_nop_();_nop_();
_nop_();_nop_();
SC=0; /* start */
write_IIC(0xa0);
write_IIC(address);
write_IIC(x);
SD=0;
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SD=1; /* stop */
}
/*-------------------------------------------------------------------------*/
unsigned char read_8583_byte(unsigned char address)
{
char i;
SD=1;
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SD=0;
_nop_();_nop_();
_nop_();_nop_();
SC=0; /* start */
write_IIC(0xa0);
write_IIC(address);
SD=0;
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SD=1; /* stop */
SD=1;
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SD=0;
_nop_();_nop_();
_nop_();_nop_();
SC=0; /* start */
write_IIC(0xa1);
i=8;
do
{
B=B<<1;B0=SD;
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SC=0;
_nop_();_nop_();
_nop_();_nop_();
i--;
}
while(i!=0);
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SC=0;
_nop_();_nop_();
_nop_();_nop_();
SD=0;
SC=1;
_nop_();_nop_();
_nop_();_nop_();
SD=1; /* stop */
return(B);
}
/*-------------------------------------------------------------------------*/
void display_frequency()
{
unsigned int x;
x=delta_counter;
uled[7]=CODEF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -