📄 uart-adc-cbc.c
字号:
w_com(colh);
w_com(coll);
w_com(0xe0);
for(seg=0;seg<16;seg++)
{
wdata(*a);
a++;
}
w_com(0xee);
pages++;
}
}
//*********************************************************************
//*********************************************************************
void LCM_CLR(void)
{
unsigned int half,seg;
unsigned int page;
flag_user=1;
for(page=0xb0;page<0xb8;page++)
{
for(half=0;half<2;half++)
{
w_com(page);
w_com(0x10);
w_com(0x00);
w_com(0xe0);
for(seg=0;seg<96;seg++)
wdata(0x00);
w_com(0xee);
flag_user=!flag_user;
}
}
}
//***keypad operation code****//
/*************************************************/
/*************************************************/
void key_check(void)
{
unsigned int key=0;
key=(P3&key);
if(key!=0)
keypad(key);
}
/*************************************************/
//direction key up /down,make a cycle of the symbols;
unsigned int key_detect(void)
{
unsigned int i,key=0,key1=0,key2=0,temp=0x01;
for(i=0;i<8;i++)
{
key=(P3&temp);
delay40ms();
key1=(P3&temp);;
if((key1==0)&&(key==0))
{
key=i+1;
break;
}
else
{
key=0;
temp=(temp<<1);
}
}
return(key);
}
/*************************************************/
/*************************************************/
/*************************************************/
void keypad(void)
{
int temp;
unsigned int key ;
key=key_detect();
switch(key)
{
case 1:
{
if(key_set==0)
key_set=3;
if(key_set<6)
key_set+=1;
else
key_set=4;
modify_clock_display();
break;
}
case 2: //roll the number up
{
if(key_set!=0)
{
temp=roll_key_up();
record_clock_set_parameters(temp);
modify_clock_display();
}
break;
}
case 3: //roll the number down
{
if(key_set!=0)
{
temp=roll_key_down();
record_clock_set_parameters(temp);
modify_clock_display();
}
break;
}
case 4:
{
write_clk_regs(&ds1302_clock_set[0]);
// if(7<key_set<=10)
// modify_others();
key_set=0;
key_up=0;
key_down=0;
key_ent=0;
clock_set=0;
break;
}
case 5:
{
key_set=0;
key_up=0;
key_down=0;
key_ent=0;
clock_set=0;
break;
}
default : break;
}
delay();
delay();
}
/***************************************************************************/
/***************************************************************************/
void record_clock_set_parameters(unsigned int key_count)
{
unsigned int temp,temp1,months ;
switch(key_set)
{
case 1://year
{
temp=(ds1302_clock_set[6]&0x0f);
temp1=(ds1302_clock_set[6]&0xf0);
temp1=(temp1>>4);
temp1=temp1*10+temp;
if((temp1+key_count)<100)
temp1+=key_count;
else
temp1=temp1+key_count-100;
if((temp1!=((unsigned int)(temp1/4)*4))&&(ds1302_clock_set[4]==2)&&(ds1302_clock_set[3]==0x29))
ds1302_clock_set[3]=0x28;
temp=(unsigned int)temp1/10;
temp1=temp1-temp*10;
ds1302_clock_set[6]=temp1+(temp<<4);
break;
}
case 2://month
{
temp=(ds1302_clock_set[4]&0x0f);
temp1=(ds1302_clock_set[4]&0x10);
temp1=(temp1>>4);
temp1=temp1*10+temp;
if((temp1+key_count)<13)
temp1+=key_count;
else
temp1=temp1+key_count-12;
temp=(unsigned int)temp1/10;
temp1=temp1-temp*10;
ds1302_clock_set[4]=temp1+(temp<<4);
break;
}
case 3://date
{
temp=(ds1302_clock_set[3]&0x0f);
temp1=(ds1302_clock_set[3]&0x30);
temp1=(temp1>>4);
temp1=temp1*10+temp;
months=months_judge();
if((temp1+key_count)<(months+1))
temp1+=key_count;
else
temp1=temp1+key_count-months;
temp=(unsigned int)temp1/10;
temp1=temp1-temp*10;
ds1302_clock_set[3]=temp1+(temp<<4);
break;
}
case 4://hour
{
temp=(ds1302_clock_set[2]&0x0f);
temp1=(ds1302_clock_set[2]&0x30);
temp1=(temp1>>4);
temp1=temp1*10+temp;
if((temp1+key_count)<24)
temp1+=key_count;
else
temp1=temp1+key_count-24;
temp=(unsigned int)temp1/10;
temp1=temp1-temp*10;
ds1302_clock_set[2]=temp1+(temp<<4);
break;
}
case 5://minutes
{
temp=(ds1302_clock_set[1]&0x0f);
temp1=(ds1302_clock_set[1]&0x70);
temp1=(temp1>>4);
temp1=temp1*10+temp;
if((temp1+key_count)<60)
temp1+=key_count;
else
temp1=temp1+key_count-60;
temp=(unsigned int)temp1/10;
temp1=temp1-temp*10;
ds1302_clock_set[1]=temp1+(temp<<4);
break;
}
case 6://seconds
{
temp=(ds1302_clock_set[0]&0x0f);
temp1=(ds1302_clock_set[0]&0x70);
temp1=(temp1>>4);
temp1=temp1*10+temp;
if((temp1+key_count)<60)
temp1+=key_count;
else
temp1=temp1+key_count-60;
temp=(unsigned int)temp1/10;
temp1=temp1-temp*10;
ds1302_clock_set[0]=temp1+(temp<<4);
break;
}
case 7://day
{
if((ds1302_clock_set[5]+key_count)<8)
ds1302_clock_set[5]+=key_count;
else
ds1302_clock_set[5]=ds1302_clock_set[5]+key_count-7;
break;
}
}
}
/*************************************************/
/*************************************************/
unsigned int roll_key_up(void)
{
unsigned int i=1;
return(i);
}
/*************************************************/
/*************************************************/
unsigned int roll_key_down(void)
{
unsigned int months;
switch(key_set)
{
case 1:
{//year
key_down=99;
break;
}
case 2://months
{
key_down=11;
break;
}
case 3://dates
{
months=months_judge();
key_down=months-1;
break;
}
case 4://hours
{
key_down=23;
break;
}
case 5://minutes
{
key_down=59;
break;
}
case 6://seconds
{
key_down=59;
break;
}
case 7:
{
key_down=6;
break;
}
case 8:
case 9:
{
key_down=26;
break;
}
default : break;
}
return(key_down);
}
/***********************************************************************/
/***********************************************************************/
/***********************************************************************/
// Pinout:
void PORT_Init(void)
{
XBR1 = 0x00;
XBR0 = 0x00;
XBR2 = 0x40;
PRT0CF=0xff;
PRT1CF=0xff;
PRT2CF=0xff;
}
//-----------------------------------------------------------------------------
// SYSCLK
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
int i;
OSCXCN = 0x67;
for (i=0; i < 256; i++) ;
while (!(OSCXCN & 0x80)) ;
OSCICN = 0x08;
}
//------------------------------------------------------------------------------------
// Timer3_Init
//------------------------------------------------------------------------------------
void Timer3_Init (int counts)
{
TMR3CN = 0x00; // Stop Timer3; Clear TF3;
TMR3RL = -counts;
TMR3 = 0xffff;
EIE2 |= 0x01;
TMR3CN |= 0x04; // start Timer3
}
//------------------------------------------------------------------------------------
// Interrupt Service Routines
//------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------
void Timer3_ISR (void)
{
static int j=0;
TMR3CN &= ~(0x80); // clear TF3
P0=p0led[j];
j++;
if(j==2)
j=0;
}
/******************************************************************/
/*delay*/
/******************************************************************/
void delay(void)
{
int i,j;
for(i=0;i<300;i++)
for(j=0;j<200;j++);
}
/******************************************************************/
/*delet the tremble delay*/
/******************************************************************/
void delay40ms(void)
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<200;j++);
}
/***************************************************************************
nop code
****************************************************************************/
void nop(void)
{
int j ;
for(j=0;j<15;j++);
}
//AD dealing code
/*************************************************/
/*************************************************/
//**************************************************
long high_temp(void)
{
long result_temp;
float E=(result[0]*24380/65536)/10;
float t;
if (E >= 0 && E < 0.0879)
t = (6666.67*E + 103.57)/6.8515;
if (E >= 0.0879 && E < 0.18705)
t = (6666.67*E + 195.61)/7.3376;
else if (E >= 0.18705 && E < 0.30135)
t = (6666.67*E + 263.05)/7.5703;
else if (E >= 0.30135 && E < 0.41505)
t = (6666.67*E + 311.47)/7.6945;
else if (E >= 0.41505 && E < 0.53055)
t = (6666.67*E + 363.8)/7.8;
else if (E >= 0.53055 && E < 0.64755)
t = (6666.67*E + 427.89)/7.9073;
else if (E >= 0.64755 && E < 0.7662)
t = (6666.67*E + 522.96)/8.043;
else if (E >= 0.7662 && E < 0.88695)
t = (6666.67*E + 661.34)/8.217;
else if (E >= 0.88695 && E < 1.0104)
t = (6666.67*E + 803.29)/8.3758;
else if (E >= 1.0104 && E > 1.1361)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -