📄 uart-adc-cbc.c
字号:
#include <c8051f000.h>
#include <intrins.h>
#include<stdio.h>
#include<math.h>
unsigned char pd;
/*********************************************************************/
sbit SCLK = P2^7; /*实时时钟时钟线引脚 */
sbit IO = P2^6;
sbit RSTB = P0^0;
sbit LED1 = P0^1; // green LED: '1' = ON; '0' = OFF
sbit LED2 = P0^2; // green LED: '2' = ON; '0' = OFF
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P07 = P0^7;
/***************************************************************
//--------------------------------------------------------------*/
sfr16 DP = 0x82; // data pointer
sfr16 TMR3RL = 0x92; // Timer3 reload value
sfr16 TMR3 = 0x94; // Timer3 counter
sfr16 ADC0 = 0xbe; // ADC0 data
sfr16 ADC0GT = 0xc4; // ADC0 greater than window
sfr16 ADC0LT = 0xc6; // ADC0 less than window
#define INT_DEC 8 // integrate and decimate ratio
#define LCD_DI P20
#define LCD_RW P21
#define LCD_E P22
#define LCD_CSA P24
#define LCD_CSB P23
#define LCD_RST P07
#define LCD_DATA P1
#define SYSCLK 11059200 // approximate SYSCLK frequency in Hz
unsigned long result[9];
int time_ok=0;
unsigned char ad[9][5];
unsigned char ad_other[9][5];
unsigned char channel=0;
unsigned char ad_ok[9];
unsigned int key_set=0;
unsigned int key_up=1;
unsigned int key_down=1;
unsigned int key_ent=1;
unsigned int clock_set=0;
unsigned int flag_user;
unsigned int code LCM_initialize_parameters[13]={
0xaf,0x40,0xa0,0xa6,0xa4,0xa2,0xc8,0x2f,0x24,0x81,0x24,0xf8,0x00};
unsigned int ds1302_clock[7];
unsigned int ds1302_clock_set[7];
unsigned int code ds1302_origin[7]={0x00,0x59,0x23,0x29,0x02,0x07,0x56};
unsigned int key_number;
unsigned int code alphabet_big[];
unsigned int code alphabet_small[];
unsigned int code symbol[];
unsigned int code number[];
void PORT_Init (void);
void Timer3_Init (int counts);
void Timer3_ISR (void);
unsigned int xdata p0led[]={0xaa,0x55};
void LCM_initialize(void);
void w_com(unsigned int x);
void wdata(unsigned int x);
void LCM_CLR(void);
void disp_16_8(unsigned int *a,unsigned int page, unsigned int line8);
void disp_16_8_reverse(unsigned int *a,unsigned int page, unsigned int line8);
void disp_16_16(unsigned int *a,unsigned int page, unsigned int line8);
void display_clock(unsigned int *p);
void input_clock_parameter_display(void);
void write_clock_regs(unsigned int *p);
void nop(void);
void delay(void);
void delay40ms(void);
void record_clock_set_parameters(unsigned int key_count);
void keypad(unsigned int key);
unsigned int roll_key_up(void);
unsigned int roll_key_down(void);
//****clock ds1302 code****//
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
void reset_3w(void)
{
SCLK = 0;
nop();
RSTB = 0;
nop();
RSTB = 1;
nop();
}
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
void wbyte_3w(unsigned int W_Byte)
{
unsigned int i;
for(i = 0; i < 8; ++i)
{
IO = 0;
nop();
if(W_Byte & 0x01)
{
IO = 1; /* set port pin high to read data */
}
nop();
SCLK = 0;
nop();
SCLK = 1;
nop();
W_Byte >>= 1;
}
}
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
unsigned int rbyte_3w(void)
{
unsigned int i;
unsigned int R_Byte;
unsigned int TmpByte;
R_Byte = 0x00;
IO = 1;
for(i=0; i<8; ++i)
{
nop();
SCLK = 1;
nop();
SCLK = 0;
nop();
TmpByte = (unsigned int)IO;
TmpByte <<= 7;
R_Byte >>= 1;
R_Byte |= TmpByte;
}
return R_Byte;
}
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
void clkwritebyte(unsigned int ClkAdd,unsigned int ClkData)
{
ClkAdd = ((ClkAdd * 2) | 0x80);
reset_3w();
wbyte_3w(ClkAdd);
wbyte_3w(ClkData);
reset_3w();
}
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---- read and display clock registers ---- */
void get_clk_regs(unsigned int *p)
{
unsigned int i;
reset_3w();
wbyte_3w(0xBF); /* clock burst */
for(i=0;i<7;i++)
{
*p = rbyte_3w();
p++;
}
reset_3w();
}
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ----------- write clock in burst mode --------------- */
void write_clk_regs(unsigned int *p)
{
unsigned int i;
reset_3w();
wbyte_3w(0x8e); /* control register */
wbyte_3w(0);
reset_3w();
wbyte_3w(0x90);
wbyte_3w(0xab);
reset_3w();
wbyte_3w(0xbe);
for(i=0;i<7;i++)
{
wbyte_3w(*p);
p++;
}
wbyte_3w(0);
wbyte_3w(0xab);
reset_3w();
wbyte_3w(0x8e);
wbyte_3w(0x80); /* disable write protect */
reset_3w();
}
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Note: NO error checking is done on the user entries! */
////2059(3b) 12(0a) 31(1f) 23(17) 59(3b) sun07
void DS1302_initialize(unsigned int *p)
{
unsigned int i;
reset_3w();
wbyte_3w(0x8e); /* control register */
wbyte_3w(0);
reset_3w();
wbyte_3w(0x90);
wbyte_3w(0xab);
reset_3w();
wbyte_3w(0xbe); /* clock burst write (eight registers) */
for(i=0;i<7;i++)
{
wbyte_3w(*p);
p++;
}
wbyte_3w(0);
wbyte_3w(0xab);
reset_3w();
wbyte_3w(0x8e);
wbyte_3w(0x80); /* disable write protect */
reset_3w();
}
/*************************************************/
/*************************************************/
//clock status check
unsigned int clock_status_check(void)
{
unsigned int temp;
reset_3w();
wbyte_3w(0x81);
temp= rbyte_3w();
reset_3w();
temp=(temp&0x80);
if(temp==0x80)
temp=1;
else temp=0;
return(temp);
}
/*************************************************/
/*************************************************/
//months judge
unsigned int months_judge(void)
{
unsigned int temp,temp1,months;
switch(temp1)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
{
months=31;
break;
}
case 4:
case 6:
case 9:
case 11:
{
months=30;
break;
}
case 2:
{
temp=(ds1302_clock_set[6]&0x0f);
temp1=(ds1302_clock_set[6]&0xf0);
temp1=(temp1>>4);
temp1=temp1*10+temp;
temp=(unsigned int)temp1/4;
if(temp1!=(temp*4))
months=28;
if(temp1==(temp*4))
months=29;
break;
}
}
return(months);
}
/*************************************************/
/*************************************************/
void display_clock(unsigned int *p)
{
unsigned int i,temp,temp1,clock[7];
for(i=0;i<7;i++)
{
clock[i]=*p;
p++;
}
/*
// disp_16_8(&number[2*16],1,15);
// disp_16_8(&number[0],1,16);
//year
temp=(clock[6]&0x0f);
temp1=(clock[6]&0xf0);
temp1=(temp1>>4);
disp_16_8(&number[temp1*16],1,17);
disp_16_8(&number[temp*16],1,18);
disp_16_8(&symbol[48],1,19);
//month
temp=(clock[4]&0x0f);
temp1=(clock[4]&0x10);
temp1=(temp1>>4);
disp_16_8(&number[temp1*16],1,20);
disp_16_8(&number[temp*16],1,21);
disp_16_8(&symbol[48],1,22);
//date
temp=(clock[3]&0x0f);
temp1=(clock[3]&0x30);
temp1=(temp1>>4);
disp_16_8(&number[temp1*16],1,23);
disp_16_8(&number[temp*16],1,24);
*/
//hours
temp=(clock[2]&0x0f);
temp1=(clock[2]&0x30);
temp1=(temp1>>4);
disp_16_8(&number[temp1*16],1,1);
disp_16_8(&number[temp*16],1,2);
disp_16_8(&symbol[32],1,3);
//minutes
temp=(clock[1]&0x0f);
temp1=(clock[1]&0x70);
temp1=(temp1>>4);
disp_16_8(&number[temp1*16],1,4);
disp_16_8(&number[temp*16],1,5);
disp_16_8(&symbol[32],1,6);
//second
temp=(clock[0]&0x0f);
temp1=(clock[0]&0x70);
temp1=(temp1>>4);
disp_16_8(&number[temp1*16],1,7);
disp_16_8(&number[temp*16],1,8);
/*
switch(temp1=(clock[5]&0x07))
{
case 1 : //MON
{
disp_16_8(&alphabet[12*16],5,21);
disp_16_8(&alphabet[14*16],5,22);
disp_16_8(&alphabet[13*16],5,23);
break;
}
case 2 : //TUE
{
disp_16_8(&alphabet[19*16],5,21);
disp_16_8(&alphabet[20*16],5,22);
disp_16_8(&alphabet[4*16],5,23);
break;
}
case 3 : //WED
{
disp_16_8(&alphabet[22*16],5,21);
disp_16_8(&alphabet[4*16],5,22);
disp_16_8(&alphabet[3*16],5,23);
break;
}
case 4 : //THU
{
disp_16_8(&alphabet[19*16],5,21);
disp_16_8(&alphabet[7*16],5,22);
disp_16_8(&alphabet[20*16],5,23);
break;
}
case 5 : //FRI
{
disp_16_8(&alphabet[5*16],5,21);
disp_16_8(&alphabet[17*16],5,22);
disp_16_8(&alphabet[8*16],5,23);
break;
}
case 6 : //SAT
{
disp_16_8(&alphabet[18*16],5,21);
disp_16_8(&alphabet[0],5,22);
disp_16_8(&alphabet[19*16],5,23);
break;
}
case 7 : //SUN
{
disp_16_8(&alphabet[18*16],5,21);
disp_16_8(&alphabet[20*16],5,22);
disp_16_8(&alphabet[13*16],5,23);
break;
}
default : break;
}*/
}
/*************************************************/
/*************************************************/
void input_clock_parameter_display(void)
{
unsigned int temp,temp1;
switch(key_set)
{
case 1: //year
{
disp_16_8_reverse(&number[2*16],1,1);
disp_16_8_reverse(&number[0],1,2);
temp=(ds1302_clock_set[6]&0x0f);
temp1=(ds1302_clock_set[6]&0xf0);
temp1=(temp1>>4);
disp_16_8_reverse(&number[temp1*16],1,3);
disp_16_8_reverse(&number[temp*16],1,4);
break;
}
case 2:
{//month
temp=(ds1302_clock_set[4]&0x0f);
temp1=(ds1302_clock_set[4]&0x10);
temp1=(temp1>>4);
disp_16_8_reverse(&number[temp1*16],1,6);
disp_16_8_reverse(&number[temp*16],1,7);
break;
}
case 3: //date
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -