歡迎您光臨本站 登入註冊首頁

液晶顯示1602與遙控程序演示

admin @ 2014-03-14 , reply:0

概述

液晶顯示1602與遙控程序演示!//遙控帶液晶顯示程序,已經調試完畢2002/10/30//並可顯示時鐘//若遙控接收不到,修改脈寬值即可////---------------------------……

液晶顯示1602與遙控程序演示!
//遙控帶液晶顯示程序,已經調試完畢2002/10/30
//並可顯示時鐘
//若遙控接收不到,修改脈寬值即可
//
//-----------------------------------------------
//作者:Mingtree
//-----------------------------------------------
#include <reg51.h>
#include<intrins.h>
#include<absacc.h>

//變數類型標識的宏定義,
#define uchar unsigned char
#define uint unsigned int

#define DEDA 20
unsigned char deda=0;

// 1602 控制引腳定義,
sbit RS = P0^0;
sbit RW = P0^1;
sbit Elcm =P0^2;
#define DATAPORT P1 // 數據埠
#define busy 0x80 //用於檢查寫忙信號


//外鍵控制(本程序未用,現在用遙控控制)
sbit act=P2^1; /*加鍵*/
sbit deb=P2^0; /*減鍵*/
sbit cong=P2^2; /*功能鍵*/

 

char data led6[8];/*六位顯示緩衝區*/

code char love[]="I LOVE YOU ";

code char time[]="0123456789ABCDEF:MinHour ";

unsigned char hour=0,min=0,sec=0;
bit menu=0;
bit up=0;
bit dw=0;
#define temp1 DBYTE[0x50]
#define temp2 DBYTE[0x51]
#define temp3 DBYTE[0x52]
#define temp4 DBYTE[0x53]
#define temp5 DBYTE[0x54]
//遙控
unsigned char yt; //中斷次數
bit start=0; //起碼標誌
bit h=0; //解碼標誌
unsigned char da=0; //暫存數據
unsigned char gt=0,gv=0; //

//
void delay400ms(void);
void delay5ms(void);
void lcdreset( void ); //LCD RESET
void WaitForEnable( void ); //忙信號檢測

void lcdwrite_c( uchar CMD,uchar AttribC );//
void DispOneChar(uchar x,uchar y,uchar Wdata);//顯示一個字元
void LocateXY( char posx,char posy);
void LcdWrite_D( char dataW ) ; //寫一個數據
void yk(void);
/*鍵盤檢測*/
void acct_1(void);
unsigned char conh=0; /*功能鍵鍵值*/
void key_hit(unsigned char add3);
void delay(void);

/*定時初始化------------*/
void init_timer()
{
TMOD=0x11;
TH0=0x4c;
TL0=0x00;

IP=0x10;
IE=0X82;
TR0=1;
IT0=1; //邊沿觸發方式
EX0=1; //INT0

}
/*------------------------*/
/*----------顯示緩衝區放數子程序--------------*/
void gift_in(void){
if(conh==0){
led6[0]=hour/10;
led6[1]=hour%10;
led6[2]=16;
led6[3]=min/10;
led6[4]=min%10;
led6[5]=16;
led6[6]=sec/10;
led6[7]=sec%10;
}
else if(conh==1){
led6[0]=17;
led6[1]=18;
led6[2]=19;
led6[3]=16;
led6[4]=min/10;
led6[5]=min%10;
led6[6]=24;
led6[7]=24;
}
else{
led6[0]=20;
led6[1]=21;
led6[2]=22;
led6[3]=23;
led6[4]=16;
led6[5]=hour/10;
led6[6]=hour%10;
led6[7]=24;


}
}
/*----------時間判斷子程序--------------*/

conv()
{
if(sec==60){min++;sec=0;}
if(min==60){hour++;min=0;}
if(hour==24) hour=0;

gift_in();
}
/*-----------中斷服務程序-------------*/
void time8()interrupt 1 using 3
{
TH0=0x4c;
TL0=0x00;

deda++;
if(deda==DEDA)
{
sec++;deda=0;

}
conv();
}

/*-----------送顯子程序-------------*/
void disp1(uchar x,uchar y) {
unsigned char *pd;
unsigned char*kt;
unsigned char b;
kt=&led6[0]; /*送led的首地址給指針KT*/
for(b=0;b<8;b++){ /* 顯示六位*/
pd=&time[*kt]; /*查表---送要顯示的碼給指針pd*/
kt++; /*緩衝區加1*/
DispOneChar(x,y,*pd);
x++; //顯示位置X
}
}

/*------------------------*/


/*=======================================================
顯示字元串
=======================================================*/
void disp(uchar x,uchar y,char *ptr) {
uchar i,l=0;
while (ptr[l] >31){l++;};
for (i=0;i<l;i++) {
DispOneChar(x++,y,ptr[i]);
if ( x == 16 ){
x = 0; y ^= 1;
}
}
}

/*=======================================================
按指定位置顯示數出一個字元
=======================================================*/
void DispOneChar(uchar x,uchar y,uchar Wdata) {

LocateXY( x, y ); // 定位顯示地址
LcdWrite_D( Wdata ); // 寫字元
}

/*=======================================================
顯示游標定位
=======================================================*/
void LocateXY( char posx,char posy) {

uchar temp;

temp = posx & 0xf;
posy &= 0x1;
if ( posy )temp |= 0x40;
temp |= 0x80;
lcdwrite_c(temp,0);
}
//初始化
void lcdreset(void){
lcdwrite_c(0x38, 0); //顯示模式設置(不測試忙信號)共三次
delay5ms();
lcdwrite_c(0x38, 0);
delay5ms();
lcdwrite_c(0x38, 0);

[admin via 研發互助社區 ] 液晶顯示1602與遙控程序演示已經有2915次圍觀

http://cocdig.com/docs/show-post-494.html