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

📄 dh_lcd_4.c

📁 useing interrupt in pic 16f877
💻 C
字号:

#include<pic.h>
#include <stdio.h>
#include <math.h>

#define rs		RD0
#define rw		RD1
#define e		RD2
#define d		PORTD

unsigned char g;
unsigned char i,j,p,h,n,pn,hn;
unsigned char const a[]= { 0x28, 0x0c, 1, 6};
unsigned char const *thu[]={"Monday","Tue","Wen","Thu","Fri","Sat","Sun"};

void ghi(unsigned char x,unsigned char y);
unsigned char doc();
void toado( unsigned char x, unsigned char y);
unsigned char swit(unsigned int k);
void hienchu(unsigned char const *str,unsigned char const x,unsigned char const y);
void CT1();
void CT2();
void CT3();
void CT4();

// Interrupt Handler
void interrupt TM1()
{

 // Timer1 Interrupt - Freq = 60.00 Hz - Period = 0.01666560 seconds
  if (INTF==1)
  {INTF=0;
	n++;}
  if (TMR1IF == 1) 
  {
    TMR1IF = 0;          
    TMR1IE = 1;       
    TMR1H = 215;            
    TMR1L = 80;            
	i++;
	if(i==60)
		{
		j++;
		i=0;
		if(j==60)
			{p=p++;
			j=0;
			if(p==60)
				{h++;
				p=0;
				if(h==24)
					h=0;
				}
			}
		}
	}
}

void delay_us(unsigned char n)
{
	unsigned char i;
	for(i=0;i<n;i++);
}

void delay_ms(unsigned int n)
{
	unsigned int i;
	for(i=0;i<n;i++) delay_us(255);
}


void khoitao()
{
int i;
rs=0;
rw=0;
e=0;
ghi(0,a[0]>>4);
for(i=1;i<=4;++i)
ghi(0,a[i]);
}

void init()
{
TRISB=0xff;       
TRISC=0;
PORTC=0;
TRISD=0;
PORTD=0;
i=0;n=0;
j=0;p=0;h=0;
pn=0;hn=0;


//Timer1 Registers Prescaler= 8 - TMR1 Preset = 3036 - Freq = 10.00 Hz - Period = 0.100000 seconds
T1CKPS1 = 1;   
T1CKPS0 = 1;   
T1OSCEN = 0;   
T1SYNC = 1;   
TMR1CS = 0;   
TMR1ON = 0;    
TMR1H = 215;             
TMR1L = 80;             


// Interrupt Registers
 INTCON = 0;           
 INTE = 1;           	
 INTF = 0;				
 TMR0IE = 0;        	
 TMR1IF = 0;            
 TMR1IE = 1;         
 TMR0IF = 0;        
 GIE = 1;          
 PEIE = 1;     
}


// code starts here...
void main()
{
init();
khoitao();
delay_us(100);
ghi(0,0x28);     
 while(n==0){}
 while(1)
  {
		while(n%2==1)
			{if((n%2==1)&&n>3) n=3;
			TMR1ON = 0;
			CT4();
			CT1();
			hienchu("Good Luck!",3,2);}
		if(n==2)
			{pn=p;
			hn=h;
			p=0;
			h=0;
			n=4;}
		if(n==4)
			{TMR1ON = 1;	
			CT1();
			hienchu("Good Luck!",3,2);}

	/*	if(n==3)
			{TMR1ON = 0;
			CT2();}
		if(n==4)
			{TMR1ON = 0;
			CT3();}
		if(n>4) {TMR1ON=1;}*/

		
		if(pn!=0|hn!=0&&h==hn&&p==pn)
		{while(p==pn) 
			{if(n%2==1) TMR1ON=0;
				else TMR1ON=1;
				CT1();
				hienchu("Be oi day thoi!",1,2);}
			if(p==(pn+1)&&j==0) 
				{delay_ms(50);
				ghi(0,0x01);
				delay_us(10);}}
	}	
}

//end void main


unsigned char swit(unsigned int k)
{
switch(k)
	{case 0:g='0';break;
	case 1:g='1';break;
	case 2:g='2';break;
	case 3:g='3';break;
	case 4:g='4';break;
	case 5:g='5';break;
	case 6:g='6';break;
	case 7:g='7';break;
	case 8:g='8';break;
	case 9:g='9';break;
	}
return(g);
}

void CT1()
{
toado(4,1);
swit(h/10);
	ghi(1,g);
	delay_us(10);
swit(h%10);
	ghi(1,g);
	delay_us(10);
	ghi(1,':');
	delay_us(1);
swit(p/10);
	ghi(1,g);
	delay_us(10);
swit(p%10);
	ghi(1,g);
	delay_us(10);
	ghi(1,':');
	delay_us(10);
swit(j/10);
	ghi(1,g);
	delay_us(10);
swit(j%10);
	ghi(1,g);
	delay_us(10);
}


/*
unsigned char doc()
{
	unsigned char dat;
	d=0x80;
	//rs=0;
	rw = 1;
	e = 1;
	dat = d;
	e = 0;
	return(dat);
}


void CT2()
{
if(RB1==1)
	{delay_ms(50);
	if(RB1==1)
	{while(RB1==1) CT1();
		//{for(i=1;i<=600;i++) CT1();
		//p++;}
	 p++;
	if(p==60) {p=0;h++;}}}
if(RB2==1)
	{delay_ms(50);
	if(RB2==1)
	{while(RB2==1) CT1();}
	if (p>0) p--;}
}


void CT3()
{
if(RB1==1)
	{delay_ms(50);
	if(RB1==1)
	{while(RB1==1) CT1();}
	 h++;
	if(h>24) h=0;}
if(RB2==1)
	{delay_ms(50);
	if(RB2==1)
	{while(RB2==1) CT1();}
	if (h>0) h--;}
}
*/


void CT4()
{
if(RB1==1)
	{delay_ms(1);
	if(RB1==1)
	{while(RB1==1) CT1();
	 p=p+5;
	if(p==60) {p=0;h++;}}}
if(RB2==1)
	{delay_ms(1);
	if(RB2==1)
	{while(RB2==1) CT1();}
	if (p>0) p=p-5;
	else if (h>0) {p=60-5;h--;}}
}

void hienchu(unsigned char const *str,unsigned char const x,unsigned char const y)
{
toado(x,y);
while(*str)
	{ghi(1,*str++);
	delay_us(10);}
ghi(0,0x02);
delay_us(10);
}

void ghi(unsigned char x,unsigned char y)
{
//rs=0;
//while ( doc()&0x80);
rs=x;				//x=0 ghi lenh, x=1 ghi du lieu
delay_us(10);
rw=0;
delay_us(10);
e=0;
d=(y&0xf0)|(PORTD&0x0f);
delay_us(10);
e=1;
delay_us(10);
e=0;
delay_ms(10);
d=(y<<4)|(PORTD&0x0f);
delay_us(10);
e=1;
delay_us(10);
e=0;
delay_ms(10);
}

void toado( unsigned char x, unsigned char y)
{
	unsigned char address;
	switch(y)
	{
		case 1 : address=0x80;break;
		case 2 : address=0xC0;break;
		case 3 : address=0x94;break;
		case 4 : address=0xD4;break;
	}
	address+=x;
	ghi(0,address);
}

⌨️ 快捷键说明

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