阅读背景:

时钟七:在LCD1602上显示时钟,并且用按键修改时间

来源:互联网 

主函数文件:

#include <reg52.h>
#include "./delay/delay.h"

sbit RS = P2^4;
sbit RW = P2^5;
sbit E  = P2^6;
sbit beem = P3^2;

#define LCDPORT P0
#define KEYPORT P1
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM  0

unsigned char key;
unsigned char time = 0;
unsigned char shi = 0;
unsigned char fen = 0;
unsigned char miao = 0;
unsigned char Dshi = 1;
unsigned char Dfen = 0;
unsigned char Dmiao = 30;

unsigned char code SONG_TONE[]={239,239,212,189,159,159,189,159,159,142,126,120,120,159,120,120,142,159,189,142,159,189,239,212,189,159,142,159,189,212,239};
unsigned char code SONG_LONG[]={6,6,9,3,6,6,12,6,6,6,6,6,6,12,6,6,9,3,6,6,9,3,6,3,3,6,3,3,6,6,9};

unsigned char key_scan(void)
{
	  unsigned char keyvalue;
	  KEYPORT = 0xf0;
	  if(0xf0 != KEYPORT)
		{
			  delay_ms(10);
			  if(0xf0 != KEYPORT)
				{
					  KEYPORT = 0xfe;
					  if(0xfe != KEYPORT)
						{
							  keyvalue = KEYPORT;
							  keyvalue &= 0xf0;
							  keyvalue += 0x0e;
							  while(0xfe != KEYPORT);
						    delay_ms(10);
								while(0xfe != KEYPORT);
							  return keyvalue;
						}
						KEYPORT = 0xfd;
					  if(0xfd != KEYPORT)
						{
							  keyvalue = KEYPORT;
							  keyvalue &= 0xf0;
							  keyvalue += 0x0d;
							  while(0xfd != KEYPORT);
						    delay_ms(10);
								while(0xfd != KEYPORT);
							  return keyvalue;
						}
				}
		}
		return 0xff;
}

void PlayMusic(void)
{
		unsigned char q=0;
	
	  unsigned char m;
	  unsigned char k;
		while(SONG_LONG[q]!=0||SONG_TONE[q]!=0)
		{
				for(m=0;m<SONG_LONG[q]*20;m++)
				{
						beem=~beem;
						for(k=0;k<SONG_TONE[q]/3;k++);
				}
				delay_ms(10);
				q++;
		}
}

void clock()
{
			  key = key_scan();
					 		
           if(0xbe == key)
					 {
							 while(0xbe != key);
							 delay_ms(10);
							 while(0xbe != key);
							 shi++;
							 if(24 == shi)
							 {
									 shi = 0;
							 }
					 }	 
           if(0xde == key)
					 {
							 while(0xde != key);
							 delay_ms(10);
							 while(0xde != key);
							 fen++;
							 if(60 == fen)
							 {
									 fen = 0;
							 }
					 }	   
           if(0xee == key)
					 {
							 while(0xee != key);
							 delay_ms(10);
							 while(0xee != key);
							 miao++;
							 if(60 == miao)
							 {
									 miao = 0;
							 }
					 }

           if(0xbd == key)
					 {
							 while(0xbd != key);
							 delay_ms(10);
							 while(0xbd != key);
							 Dshi++;
							 if(24 == Dshi)
							 {
									 Dshi = 0;
							 }
					 }		
           if(0xdd == key)
					 {
							 while(0xdd != key);
							 delay_ms(10);
							 while(0xdd != key);
							 Dfen++;
							 if(60 == Dfen)
							 {
									 Dfen = 0;
							 }
					 }	
           if(0xed == key)
					 {
							 while(0xed != key);
							 delay_ms(10);
							 while(0xed != key);
							 Dmiao++;
							 if(60 == Dmiao)
							 {
									 Dmiao = 0;
							 }
					 }	
			  if((shi == Dshi) && (fen == Dfen) && (miao == Dmiao))
        {
						beem = 0;
						PlayMusic();
				    delay_ms(500);
			  }							 
}

void lcd1602_write(unsigned char byte,unsigned char flag)
{
	  if(flag)
		{
			  RS = 1;
		}
		else
		{
			  RS = 0; //Ñ¡ÔñÊäÈëÊý¾ÝΪÊý¾Ý
		}
		RW = 0; //д
		E = 1;  //Ñ¡ÖÐLCD
		LCDPORT = byte;
		delay_us(5);
		E = 0; //ʧÄÜLCD
}

void Timer0_init()
{
	  EA = 1;
	  TMOD |= 0x01;
	  TH0 = (65536 - 20000) / 256;
	  TL0 = (65536 - 20000) % 256;
	  ET0 = 1;
	  TR0 = 1;
}

void timer() interrupt 1
{
	  static unsigned char i = 0;
	  TH0 = (65536 - 20000) / 256;
	  TL0 = (65536 - 20000) % 256;
	  clock();
	  i++;
	  if(50 == i)
		{
			  i = 0;
			  miao++;
			  if(60 == miao)
				{
					  miao = 0;
					  fen++;
					  if(60 == fen)
						{
							  fen = 0;
							  shi++;
							  if(24 == shi)
								{
									  shi = 0;
								}
						}
				}
    }			
}

void lcd_dis_time()
{
	  lcd1602_write(0x80 + 4,LCD_WRITE_COM);
	  lcd1602_write((shi / 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write((shi % 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write(':',LCD_WRITE_DATA);
	  lcd1602_write((fen / 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write((fen % 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write(':',LCD_WRITE_DATA);
	  lcd1602_write((miao / 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write((miao % 10) + 0x30,LCD_WRITE_DATA);
}

void lcd_dis_time1()
{
	  lcd1602_write(0x80 + 0x40 + 4,LCD_WRITE_COM);
	  lcd1602_write((Dshi / 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write((Dshi % 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write(':',LCD_WRITE_DATA);
	  lcd1602_write((Dfen / 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write((Dfen % 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write(':',LCD_WRITE_DATA);
	  lcd1602_write((Dmiao / 10) + 0x30,LCD_WRITE_DATA);
	  lcd1602_write((Dmiao % 10) + 0x30,LCD_WRITE_DATA);
}

void lcd_init()
{
	  delay_ms(15);
	  lcd1602_write(0x38,LCD_WRITE_COM); 
	  delay_ms(5);
		lcd1602_write(0x38,LCD_WRITE_COM); 
	  delay_ms(5);
		lcd1602_write(0x38,LCD_WRITE_COM); 
	  delay_ms(5);
		lcd1602_write(0x38,LCD_WRITE_COM);
	  delay_ms(5);
		lcd1602_write(0x08,LCD_WRITE_COM); 
	  delay_ms(5);
		lcd1602_write(0x01,LCD_WRITE_COM); 
	  delay_ms(5);
	  lcd1602_write(0x06,LCD_WRITE_COM); 
	  delay_ms(5);
		lcd1602_write(0x0c,LCD_WRITE_COM); 
	  delay_ms(5);
}

void main()
{
	  Timer0_init();
	  lcd_init();
	  while(1)
		{
			  lcd_dis_time();
			  lcd_dis_time1();
		}
}#include <reg52.h>
#include "./dela



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: