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

📄 1602c.c

📁 包插说明书,PCB,SCH图,及N多源代码例子,网上卖的很火的一款
💻 C
字号:
#include "at89x52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
#define  SCAN_CYCLE 10000
#define  CYCLE  20
sbit RS=P2^7;
sbit RW=P2^6;
sbit E=P2^5;
#define DB0_DB7 P0
uchar cycle,TEMP;
uchar Dataflag,Cmdflag;
uint counti;
uint i=0;
static const uchar code wenzi[]={0x4f,0x77,0x65,0x6e,0x20,0x53,0x74,0x75,
                                 0x64,0x69,0x6f,0x20,0x69,0x73,0x20,0x61,
								 0x69,0x6d,0x69,0x6e,0x67,0x20,0x61,0x74,
								 0x20,0x6f,0x66,0x66,0x65,0x72,0x69,0x6e,
								 0x67,0x20,0x73,0x74,0x61,0x74,0x65,0x2d,
								 0x6f,0x66,0x2d,0x61,0x72,0x74,0x20,0x64,
								 0x65,0x73,0x69,0x67,0x6e,0x20,0x66,0x6f,
								 0x72,0x20,0x63,0x75,0x73,0x74,0x6f,0x6d,
								 0x65,0x72,0x73,0x21};
void init();
void ScreenInitString(void);
void Write(uchar tempdata);
void WriteDDR(uchar tempdata);
void CheckBusy();
void Write1(uchar tempdata);
void WriteDDR1(uchar tempdata);
void CheckBusy1();
void Delay(uint N);

main()
{
    T2CON=0x38;			/*令定时器2作为串口波特率发生器
       					/*|TF2|EXF2|RCLK|TCLK|EXEN2|TR2|C/T2|CP/RL2|*/
	TL2=0xd9;			/*设定串口波特率为9600,晶振为12MHz*/
	TH2=0xff;		
	RCAP2L=0xd9;	    /*根据串口波特率9600设定自动重载寄存器*/
	RCAP2H=0xff;		
    TR2=1;

	TMOD=0x11;			/*Timer0工作在案MODE1,16位定时器,Timer1工作在MODE2,自动重新装载模式*/
       					/*|    定时器1        |     定时器1       |*/
       					/*| GATE|C/T| M1 | M0 | GATE|C/T| M1 | M0 |*/
	TH0=(65536-SCAN_CYCLE)/256; /*设定Timer0每隔SCAN_CYCLEu中断一次*/
    TL0=(65536-SCAN_CYCLE)%256;				        /*启动TEMER0*/
	SCON=0x50;			/*设定UART工作在MODE3模式,可传送和接收数据,REN=1*/
					    /*| SM0| SM1| SM2| REN| TB8| RB8| TI | RI |*/
    IE=0x92;			/*使能总中断、Timer0,1中断、外部中断1,2*/
       					/*| EA| - | ET2| ES | ET1| EX1| ET0| EX0|*/
	cycle=50;
	SP=60;
	P2=0x00;
	init();
	counti=0;
	ScreenInitString();
	while(1)
	nop;
}
void Delay(uint N)
{
    for(i=0;i<N;i++)
	i=i;
}
void init()
{
    RS=0;
	RW=0;
	E=1;
    Write(0x38);
    Delay(1000);
	Write(0x38);
    Delay(1000);
	Write(0x38);
	Write(0x0F);
	Write(0x06);
	Write(0x01);
}

void ScreenInitString(void)
{
    Write(0x80);
	WriteDDR(0x3E);
    WriteDDR(0x3E);
    WriteDDR(0x4F);
    WriteDDR(0x77);
    WriteDDR(0x65);
    WriteDDR(0x6E);
    WriteDDR(0x20);
    WriteDDR(0x20);
    WriteDDR(0x53);
    WriteDDR(0x74);
    WriteDDR(0x75);
    WriteDDR(0x64);
    WriteDDR(0x69);
    WriteDDR(0x6F);
    WriteDDR(0x3C);
    WriteDDR(0x3C);

    Write(0xC0);
	WriteDDR(0x44);
    WriteDDR(0x65);
    WriteDDR(0x73);
    WriteDDR(0x69);
    WriteDDR(0x67);
    WriteDDR(0x6E);
    WriteDDR(0x20);
    WriteDDR(0x66);
    WriteDDR(0x6F);
    WriteDDR(0x72);
    WriteDDR(0x20);
    WriteDDR(0x79);
    WriteDDR(0x6F);
    WriteDDR(0x75);
    WriteDDR(0x21);
    WriteDDR(0x21);
}
void Write(uchar tempdata)
{
    DB0_DB7=tempdata;
	RS=0;
	RW=0;
	E=0;
	nop;
	E=1;
	nop;
	CheckBusy();
}
void WriteDDR(uchar tempdata)
{
    DB0_DB7=tempdata;
	RS=1;
	nop;
	RW=0;
	E=0;
	nop;
	E=1;
	nop;
	CheckBusy();
}
void CheckBusy()
{
	DB0_DB7=0xff;
	RW=1;
	RS=0;
	E=0;
	nop;
	E=1;
	do
	{
		nop;
        TEMP=DB0_DB7;
	}while((TEMP&0x80)==0x80);
	RW=0;
} 
void Write1(uchar tempdata)
{
    DB0_DB7=tempdata;
	RS=0;
	RW=0;
	E=0;
	nop;
	E=1;
	nop;
	CheckBusy1();
}
void WriteDDR1(uchar tempdata)
{
    DB0_DB7=tempdata;
	RS=1;
	nop;
	RW=0;
	E=0;
	nop;
	E=1;
	nop;
	CheckBusy1();
}
void CheckBusy1()
{
	DB0_DB7=0xff;
	RW=1;
	RS=0;
	E=0;
	nop;
	E=1;
	do
	{
		nop;
        TEMP=DB0_DB7;
	}while((TEMP&0x80)==0x80);
	RW=0;
}
	
void service_int0 () interrupt 1 using 2
{
	cycle--;
	if(cycle==0)
	{
	    cycle=CYCLE;
        if(counti<=14)
		{
		    WriteDDR1(wenzi[counti]);
			counti++;
		}
		else if(counti>14 && counti<sizeof(wenzi))
		{
		    Write1(0x07);
            WriteDDR1(wenzi[counti]);
			counti++;
		}
		else
		{
            counti=0;
            Write1(0x01);
		    Write1(0x06);
		}
	}
	TH0=(65536-SCAN_CYCLE)/256; 
    TL0=(65536-SCAN_CYCLE)%256;	
}

void service_int1 () interrupt 4 using 1
{
    if(TI==1)
	{
	    TI=0;
		return;
	}
	else
	{
        uchar v;
        while(RI!=1);
	    {
	        RI=0;
		    v=SBUF;
		    if(v==65)//A        
		    {
				TR0=1;             //Start timer
				Write1(0x01);
				counti=0;
		    }
		    else if(v==66)//B   
		    {
				TR0=0;             //Stop timer
		    }
            else if(v==67)//C
		    {
			    Write1(0x01);      //CLR Screen
		    }
			else if(v==68)//D
		    {
			    Write1(0x18);      //Set string left moving
		    }
			else if(v==69)//E
		    {
			    Write1(0x1C);      //Set label right moving
		    }
			else
			{
			    WriteDDR1(v);
			    SBUF=v;
			    while(TI!=1);
			    TI=0;
			}
        }
	}
}

⌨️ 快捷键说明

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