⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart-adc-cbc.c

📁 cygnal 的模拟数字信号转换程序
💻 C
📖 第 1 页 / 共 4 页
字号:
#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 + -