📄 flas.c
字号:
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#define a 0x01
#define b 0x02
#define c 0x04
#define d 0x08
#define e 0x10
#define f 0x20
#define g 0x40
#define dot 0x80
#define H 10
#define L 11
#define P 12
sbit sd=P2^7;
sbit sp=P3^5;
extern unsigned char AT24C02_Read_Byte(unsigned char Device,unsigned char Addr);
extern void AT24C02_Write_Byte(unsigned char Device,unsigned char Addr, unsigned char Data);
unsigned char set;
unsigned char KEY_Variable[3];
unsigned int tmep;
unsigned char code disp_code[] = {
a+b+c+d+e+f, // 0
b+c, // 1
a+b+d+e+g, // 2
a+b+c+d+g, // 3
b+c+f+g, // 4
a+c+d+f+g, // 5
a+c+d+e+f+g, // 6
a+b+c, // 7
a+b+c+d+e+f+g, // 8
a+b+c+d+f+g, // 9
b+c+e+f+g, //H
d+e+f, //L
a+b+e+f+g, //P
b+c+g, //+
g, //-
};
time1ms() /* 1 ms delay with XTAL 11.0592MHz */
{
int i;
for (i = 0; i<50; i++) // the value shown in this line, 50 was calibrated for 1ms
; // you may change it!
}
void sendbyte(unsigned char yte)
{ P2=0;
sd=1;
P0=disp_code[yte];
//sd=0;
}
void display(unsigned int i)
{ unsigned int k;
unsigned char j,m,q;
unsigned int s[6];
s[0] = i/1000;
k = i%1000;
s[1] = k/100;
k = k%100;
s[2] = k/10;
k = k%10;
s[3] = k;
//k = k%10;
//s[4] = k;
j=0x80;
for(k = 0; s[k] == 0 && k<4; k++);
if (k==4) k--; // if all bytes are '0', get back one position
do
{
P2=j;
P0=(disp_code[s[k++]]);
j>>=1;
}
while (k<5);
}
#define KEY_SET 0x07//设置键
#define KEY_UP 0x0b//向上键
#define KEY_DOEN 0x0d//向下键
#define KEY_RUN 0x0e//运行键
#define KEY_P1 P1
/***************************************************************************************************
函数名称:KEY_JIEXI(unsigned int Variable)
函数入口:
unsigned int Variable :采集到的键盘值,就是P2、P3口的数值。
函数出口:
功能描述:键盘解析,通过采样的数值分析出当前按下的是那个键。(包括复合键)并针对键进行相应的操作
关键点描述:无
****************************************************************************************************/
KEY_JIEXI(unsigned int Variable)
{
sp=0;
switch(Variable)
{
//单键。。。。
case KEY_RUN: //0x01运行键
set=0;
tmep=0;
break;
case KEY_DOEN: //0x02向下键
if(set)
set--;
else
set=14;
break;
case KEY_UP: //0x04向上键
if(set<14)
{ set++;
}
else
set=0;
break;
case KEY_SET: //0x07设置键
tmep=tmep+8;
break;
default:
break;
}
sp=1;
}
/***************************************************************************************************/
/***************************************************************************************************
函数名称:KEY()
函数入口:空
函数出口:空
功能描述:键盘消抖
设计思想:
建立一个键盘值保存缓冲区KEY_Variable[3],能够连续保存最近的三次采样到的键盘值。当最后两次采
样到的值相等并且和倒数第三次的值不相等时,说明有按键按下。进行确认。当三次的采样值都相等时,说
明此按键已经确认过了,不进行确认。
****************************************************************************************************/
KEY()
{
unsigned char key_buf;
KEY_Variable[2]=KEY_Variable[1];
KEY_Variable[1]=KEY_Variable[0];
EA = 0;
key_buf=KEY_P1;
KEY_Variable[0] =key_buf&0xc0;
KEY_Variable[0] >>=4;
KEY_Variable[0]|=(key_buf&0x03);
if(KEY_Variable[0] == KEY_Variable[1])
{
if(KEY_Variable[1] == KEY_Variable[2])
{
return;
}
else
{
KEY_JIEXI(KEY_Variable[0]); //分析按下的是什么键,并做相应的处理。
}
}
return;
}
sbit gh=P3^4;
sbit low=P3^3;
unsigned int Read_Temperature(void)
{ unsigned int vioud,tmp[4];
unsigned char m,n;
gh=0;
P0=0XFF;
m=P0;
m=~m;
n=(m&0x0f);
m>>=4;
tmp[0]=m*100;
tmp[1]=n*1000;
gh=1;
low=0;
P0=0XFF;
m=P0;
m=~m;
n=(m&0x0f);
m>>=4;
tmp[3]=m;
tmp[2]=n*10;
low=1;
vioud=tmp[0];
vioud+=tmp[1];
vioud+=tmp[2];
vioud+=tmp[3];
return vioud;
}
sbit relay_dpst=P3^2;
sbit SPEAKER=P3^5;
void main(void)
{
SCON = 0x52; // 8-bit UART mode
TMOD = 0x20; // timer 1 mode 2 auto reload
TH1= 0xfd; // 9600 8n1
TR1 = 1; // run timer1*/
// void AT24C02_Init();
P1=0xff;
P0=0x00;
P2=0xf0;
//AT24C02_Write_Byte(0xA0, 0x02, 219);
//AT24C02_Write_Byte(0xA1);
//tmep=Read_Temperature(void)
// AT24C02_Read_Byte(0xA0,0x02);
while(1)
{ //unsigned char TEMP;
SPEAKER=0;
tmep=Read_Temperature();
relay_dpst=~relay_dpst;
SPEAKER=0;
//KEY();
// sendbyte(set);
display(tmep);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -