/**************************************************/
/* ÍⲿÖжϲⷽ²¨ÆµÂÊ */
/*************************************************/
#include<reg52.h>
#include <intrins.h>
#include <MATH.H>
#define uint unsigned int //¶¨Òåuint´úÌæunsigned int
#define uchar unsigned char //¶¨Òåuchar´úÌæunsigned char
#define ulong unsigned long //¶¨Òåulong´úÌæunsigned long
uchar code count[]="0123456789";
uint counter=0; //¼Ç¼Ï½µÑصĸöÊý
uint ge,shi,bai,qian,wan,calsp,f,a; // ÖжÏʱ¼ä
ulong Fre;
sbit rs=P3^5;
sbit rw=P3^6;
sbit en=P3^4;
sbit LCD_PSB = P3^7;
sbit wela = P2^6;
sbit dula = P2^7;
void delay(uint z);
void lcd_init();
void
timer_Fre_init();
bit lcd_busy() ;
void write_cmd(uchar);
void write_data(uchar);
void display_num();
void lcd_pos(uchar X,uchar Y);
void read_frequency();
void display_ceshi();
void display();
/**************************************************/
/* Ö÷º¯Êý */
/*************************************************/
void main()
{
EA=1;//¿ªÆô×ÜÖжÏ
lcd_init();
//read_frequency();
timer_Fre_init(); //¶¨Ê±Æ÷ºÍÍⲿÖжϳõʼ»¯
while(1)
{
if(f==1)
{
f=0;
display_num();
}
}
}
/**************************************************/
/* ÑÓʱº¯Êý 1ms */
/*************************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************************************/
/* 12864³õʼ»¯ */
/*************************************************/
void lcd_init()
{
wela=0;
dula=0;
LCD_PSB = 1;
write_cmd(0x34); //À©³äÖ¸Áî²Ù×÷
delay(5);
write_cmd(0x30); //»ù±¾Ö¸Áî²Ù×÷
delay(5);
write_cmd(0x0c); //ÏÔʾ¿ª£¬¹Ø¹â±ê
delay(5);
write_cmd(0x01); //Çå³ýLCDµÄÏÔʾÄÚÈÝ
delay(5);
}
/*******************************************************************/
/* */
/*¼ì²éLCDæ״̬ */
/*lcd_busyΪ1ʱ£¬Ã¦£¬µÈ´ý¡£lcd-busyΪ0ʱ,ÏУ¬¿ÉдָÁîÓëÊý¾Ý¡£ */
/* */
/*******************************************************************/
bit lcd_busy()
{
bit result;
rs = 0;
rw = 1;
en = 1;
delay(5);
result = (bit)(P0&0x80);
en = 0;
return(result);
}
/*******************************************************************/
/* */
/*дָÁîÊý¾Ýµ½LCD */
/*RS=L£¬RW=L£¬E=¸ßÂö³å£¬D0-D7=Ö¸ÁîÂë¡£ */
/* */
/*******************************************************************/
void write_cmd(uchar cmd)
{
while(lcd_busy());
rs = 0; //ÃüÁî
rw = 0; // ¶Á
en = 0;
P0 = cmd;
delay(5);
en = 1;
delay(5);
en = 0;
}
/*******************************************************************/
/* */
/*дÏÔʾÊý¾Ýµ½LCD */
/*RS=H£¬RW=L£¬E=¸ßÂö³å£¬D0-D7=Êý¾Ý¡£ */
/* */
/*******************************************************************/
void write_data(uchar dat)
{
while(lcd_busy());
rs = 1;
rw = 0;
en = 0;
P0 = dat;
delay(5);
en = 1;
delay(5);
en = 0;
}
/**************************************************/
/* Öжϳõʼ»¯ */
/*************************************************/
void timer_Fre_init() //¶¨Ê±Æ÷ºÍÍⲿÖжϳõʼ»¯
{
EX0=1;//¿ªÍⲿÖжÏ0
IT0=1; //ÉèÖóÉϽµÑØ´¥·¢·½Ê½
TMOD=0x01; //ÉèÖö¨Ê±Æ÷0Ϊģʽ1£¬¼´16λ¼ÆÊýģʽ
TH0=(65536-50000)/256; //¼ÆÊýʱ¼äΪ50ms
TL0=(65536-50000)%256;
ET0=1;//¿ªÆô¶¨Ê±Æ÷0ÖжÏ
TR0=1;//Æô¶¯¶¨Ê±Æ÷0
}
/**************************************************/
/* ¶¨Ê±Æ÷0ÖÐ¶Ï */
/*************************************************/
void timer0() interrupt 1
{
TH0=(65536-50000)/256; ;//ÖØÐÂ×°Èë³õÖµ£¬¼ÆÊýʱ¼äΪ50ms
TL0=(65536-50000)%256 ;
calsp++;
if(calsp==20)
{
calsp=0;
f=1;
//EX1=0;
//IT1=0;
//ET0=0;
// TR0=0;
}
}
/**************************************************/
/* ÍⲿÖжÏ0 */
/*************************************************/
void IN_T0() interrupt 0
{
counter++;
}
/*******************************************************************/
/* */
/*¶ÁƵÂÊ */
/*¿ª¶¨Ê±Æ÷ÖжÏ0£¬¶ÁȡƵÂÊ */
/* */
/*******************************************************************/
void read_frequency()
{
timer_Fre_init(); //¶¨Ê±Æ÷ºÍÍⲿÖжϳõʼ»¯
while(1)
{
if(f==1)
{
f=0;
display_num();
}
}
}
/*********************************************************/
/* */
/* ÏÔʾ³ÌÐò */
/* */
/*********************************************************/
void display(uchar x,uchar y,uchar dat) //Òº¾§ÐкÍÁÐÏÔʾ£¬X£ºÐÐ Y£ºÁÐ dat:ÒªÏÔʾµÄÊý¾Ý
{
lcd_pos(x,y);
write_data(dat);
}
void display_num()
{
//EX1=0;
// ET0=0;
// TR0=0;
//IT1=0;
Fre=counter;
counter=0;
ge=Fre%10000%1000%100%10;
shi=Fre%10000%1000%100/10;
bai=Fre%10000%1000/100;
qian=Fre%10000/1000;
wan=Fre/10000;
display(0,4,count[ge]);
delay(5);
display(0,3,count[shi]);
delay(5);
display(0,2,count[bai]);
delay(5);
display(0,1,count[qian]);
delay(5);
display(0,0,count[wan]);
delay(5);
//EX1=1;
// IT1=1;
// ET0=1;
// TR0=1;
}
/*********************************************************/
/* */
/* ²âÊÔÏÔʾ */
/* */
/*********************************************************/
void display_ceshi()
{
a++;
display(0,1,count[a]);
}
/*********************************************************/
/* */
/* É趨ÏÔʾλÖà */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
write_cmd(pos); //ÏÔʾµØÖ·
}
一周热门 更多>