仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
#include "reg51.h"
#include<intrins.h>
sbit S1=P0^0;
unsigned char count=0;
unsigned char miao=24;
sbit RS=0xb0;
sbit RW=0xb1;
sbit E=0xb2;
unsigned char lcd[]={'0','1','2','3','4','5','6','7','8','9'};
void lcd_w_cmd(unsigned char com);
void lcd_w_dat(unsigned char dat);
unsigned char lcd_r_start();
void lcd_int();
void delay(unsigned int i);
void delay1();
void delay1()
{
_nop_();
_nop_();
_nop_();
}
void lcd_int()
{
lcd_w_cmd(0x3c);
lcd_w_cmd(0x0e);
lcd_w_cmd(0x01);
lcd_w_cmd(0x06);
lcd_w_cmd(0x80);
}
unsigned char lcd_r_start()
{
unsigned char s;
RW=1;
delay1();
RS=0;
delay1();
E=1;
delay1();
s=P1;
delay1();
E=0;
delay1();
RW=0;
delay1();
return(s);
}
void lcd_w_cmd(unsigned char com)
{
unsigned char i;
do{
i=lcd_r_start();
i=i&0x80;
delay(2);
}while(i!=0);
RW=0;
delay1();
RS=0;
delay1();
E=1;
delay1();
P1=com;
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
void lcd_w_dat(unsigned char dat)
{
unsigned char i;
do{
i=lcd_r_start();
i=i&0x80;
delay(2);
}while(i!=0);
RW=0;
delay1();
RS=1;
delay1();
E=1;
delay1();
P1=dat;
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
void delay(unsigned int i)
{
unsigned int k;
for(k=0;k<i;k++);
}
void timer_1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(S1==0)
{
delay(1200);
if(S1==0)
{miao=24;}
}
count++;
if(count==20)
{
count=0;
miao--;
if(miao==0)
{miao=24;
}
}
}
void main()
{
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
EA=1;
TR1=1;
P1=0xff;
lcd_int();
delay(255);
while(1)
{
lcd_w_cmd(0x8e);
lcd_w_dat(lcd[miao/10]);
lcd_w_cmd(0x8f);
lcd_w_dat(lcd[miao%10]);
delay(255);
}
}
下载:
01.7z
(44.31 KB, 下载次数: 14)
|