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

📄 febf0f69.c

📁 another reference code
💻 C
字号:
#include <pic.h>
#include <htc.h>
#include <stdlib.h>

//__CONFIG(XT&WDTDIS&LVPDIS);
__CONFIG(0x1832);  

void lcd_line1(void);				//function prototypes
void lcd_line2(void);

void init();                   //I/O init
void lcd_init();               //LCD init
void write(char x);            //display one byte
void lcd_enable();             //LCD display setting.

void delay(void);
void clk_write(unsigned char);
unsigned char clk_read(void);
void clkburst(void);
void datafix(void);


#define RS RA1
#define RW RA2
#define E  RA3

#define	RST			RB5
#define	DATA		RB4
#define	SCLK		RB0
#define DATA_Tris TRISB4

char number[16] = "  :  :          ";
char daydate[16] = "  :  :20        ";
char sec[] = "           ";



void main(void)
{
	char x;
	unsigned char a,b;
	a=0;
	number[2] = number[5] = 0x3a;
	daydate[2] = daydate[5] = 0x3a;
	daydate[6] = 0x32;
	daydate[7] = 0x30;
	TRISB = 0;
	TRISD = 0;
	RST = 0;						//1302 reset low
	SCLK = 0;						//1302 clock low
	RW = 0;							//set lcd R/W low
	E = 0;							//set lcd E low

	delay();



        init();                //I/O init
        lcd_init();            //LCD init

	while(1)
	{
		RST = 1;					//read hours
		clk_write(0xbf);			//burst read
		sec[0] = clk_read();		//sec
		sec[1] = clk_read();		//min		
		sec[2] = clk_read();		//hour
		sec[3] = clk_read();		//date
		sec[4] = clk_read();		//month
		sec[5] = clk_read();		//day
		sec[6] = clk_read();		//year
		sec[7] = clk_read();		//control
		RST = 0;
		datafix();					//convert for display

    PORTD=0x02;                 //clr screen 
    lcd_enable();
        lcd_line1();           //display company's website  
        PORTD=0xC0;            //set the 2nd line display address
        lcd_enable();          //LCD display setting.       
        lcd_line2();           //display company's tel number.  


	}
}

void datafix(void)
{
	char temp,x;
	char *foo = sec;
	char bleh[] = "                ";
	for(x=0;x<14;x+=2)
	{
		temp = *foo;
		temp &+ 0xf0;
		temp >>= 4;
		bleh[x] = temp + 0x30;
		temp = *foo;
		temp &= 0x0f;
		bleh[x+1] = temp + 0x30;
		foo++;
	}
	number[6]=bleh[0];			//sec
	number[7]=bleh[1];
	number[3]=bleh[2];			//min
	number[4]=bleh[3];
	number[0]=bleh[4];			//hour
	number[1]=bleh[5];
	daydate[3]=bleh[6];			//day
	daydate[4]=bleh[7];
	daydate[0]=bleh[8];			//month
	daydate[1]=bleh[9];
	daydate[8]=bleh[12];			//year
	daydate[9]=bleh[13];
}

void clk_write(unsigned char dat)
{
	char x;
	for(x=0;x<8;x++)
	{
		if(dat & 0x01)					//put bit on data pin
		{
			DATA = 1;
		}
		else DATA = 0;
		SCLK = 1;						//toggle clock to latch bit
		SCLK = 0;
		dat >>= 1;						//move next bit into place
	}
}

unsigned char clk_read(void)
{
	char x;
	unsigned char dat,tmpdat;
	dat = 0;
	DATA_Tris = 1;						//make DATA input
	for(x=0;x<8;x++)
	{
		if(DATA)						//read a bit
		{
			tmpdat |= 1;
		} else {
		 	tmpdat |= 0;
		}
		tmpdat <<= 7;
		dat >>= 1;
		dat |= tmpdat;
		SCLK = 1;						//toggle clock to latch bit
		SCLK = 0;
	}
	DATA_Tris = 0;
	return(dat);
}



	
void lcd_16number(int num)
{
	number[0]=(char)(abs(num/10000)+0x30);
	num=num-abs(num/10000)*10000;
	number[1]=(char)(abs(num/1000)+0x30);
	num=num-abs(num/1000)*1000;
	number[2]=(char)(abs(num/100)+0x30);
	num=num-abs(num/100)*100;
	number[3]=(char)(abs(num/10)+0x30);
	num=num-abs(num/10)*10;
	number[4]=(char)(num+0x30);
}




//---------------------------------------
//I/O init
void init()
 {
    ADCON1=0x07;               //a port as ordinary i/o.
    TRISA=0x00;                //a port as output.
    TRISD=0x00;                //d port as output.
	return;
 }

//---------------------------------------
//LCD init
void lcd_init()
 {
    PORTD=0x01;                 //clr screen 
    lcd_enable();
    PORTD=0x38;                //8 bits 2 lines 5*7 mode.  
    lcd_enable();
    PORTD=0x0C;                //display on,cursor on,blink on.
    lcd_enable();
    PORTD=0x06;                //character not move,cursor rotate right.
    lcd_enable();
    PORTD=0x80;                //“WWW.PIC16.COM"
    lcd_enable();
	return;
 }
 


//--------------------------------------
//write a byte to lcd.
void write(char x)
 {
  PORTD=x;                   //data send to PORTD
  RS = 1;                      //is data not command
  RW = 0;                      //is write not read
  E = 0;                       //pull low enable signal
  delay();                   //for a while
  E = 1;                       //pull high to build the rising edge.

	return;    
}

//--------------------------------------
//lcd display setting 
void lcd_enable()
 {
   RS=0;                     //is command not data
   RW=0;                     //is write not read. 
   E=0;                      //pull low enable signal.           
   delay();                  //for a while.                      
   E=1;                      //pull high to build the rising edge
      
	return;
}



 void lcd_line1()
 {
    int i;
    for(i=0;i<16;++i)       //total 16 bytes to display.
       {
         write(number[i]);       //search table to display
       }
	return;
 }

 void lcd_line2()
 {
    int i;
    for(i=0;i<16;++i)       //total 16 bytes to display.
       {
         write(daydate[i]);       //search table to display
       }
	return;
 }


void delay(void)
{
	long int y;
		for(y=0;y<100;y++){}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -