📄 lcd.c
字号:
(1)yejing.c
(2)lcd.c
下面是各个程序内容:
(1)yejing.c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
#define REFRESH_YES 0x25
#define REFRESH_NO 0x52
#define WirlessbufLen 8
#define LCDCNT 0x04
uchar jiffies; //系统时钟
uchar KeyProcessnum;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
////////////////////////////////////////////////////////////////////////
//LCD显示用到的三个变量:
////////////////////////////////////////////////////////////////////////
extern uchar lcdcodedsp[LCDCNT]; //显示存储数组
extern uchar lcdrefresh; //是否需要刷新
extern uchar lcdsplycnt; //指示显示存储数组循环指
extern bit bScanKey; // 定时扫描标志位
extern void InitLcd(); //LCD显示初始化(00.00)
extern void lcddisply(); //LCD显示四个字节
extern void wcom(uchar);//命令,可以定点光标位置,范围80~87,90~97
extern void wdat(uchar);//当前位置显示一个字符
extern void ShowMessage(uchar ,uchar ,uchar);//指定位置显示一串字符
void clock_init(void)
{
jiffies = 0;
TMOD=0x02;
TH0=TL0=0xa3;
EA=1;
ET0=1;
TR0=1;
}
sys_init()
{
InitLcd();
clock_init();
}
void clock_timer(void) interrupt 1 using 1
{
jiffies++;
}
#define SCMD_READ_IIC 0x41
#define SCMD_WRITE_IIC 0x42
#define SCMD_SET_PORT 0x51
#define SCMD_GET_PORT 0x52
#define SCMD_RESET 0x61
#define SCMD_LCD_OUTNUM 0x70
#define SCMD_LCD_OUTNUM1 0x71
#define SCMD_LCD_OUTCHU 0x72
#define SCMD_LCD_OUTHEX 0x73
#define SCMD_LCD_RESET 0x74
#define SCMD_LCD_TEST 0x75
#define SCMD_LCD_CLEAR 0x76
unsigned int last1_jiffies=0;
unsigned int last2_jiffies=10;
void main()
{
sys_init();
LED1 = 0;
LED2 = 1;
while(1)
{
if (jiffies - last1_jiffies >= 20) //每次中断为50us,所以要20次才为1ms
{
last1_jiffies = jiffies;
if (last2_jiffies)
last2_jiffies--;
}
}
}
(2)lcd.c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
/*12232f 管脚定义e*/
sbit sclk=P1^4;
sbit sid=P1^5;
sbit cs=P1^6;
////////////////////////////////////////////////////////////////////////
//LCD显示用到的三个变量:
////////////////////////////////////////////////////////////////////////
uchar lcdrefresh; //是否需要刷新
//uchar lcdcodedsp[4]; //显示存储数组
uchar lcdsplycnt; //指示显示存储数组循环指
///////////////////////////////////////////////////////////////////////
uchar bdata stu;
sbit stu7=stu^7;
sbit stu0=stu^0;
//----------------忙检测----------------------
void check()
{
uchar i;
do
{
cs=1;
sid=1;
for(i=0;i<8;i++)
{
sclk=0;
if(i<6)sid=1;
else sid=0;
sclk=1;
}
for(i=0;i<16;i++)
{
sclk=0;
sclk=1;
if(i<=3||(i>=8&&i<=11))
{
stu<<=1;
stu0=sid;
}
}
cs=0;
}while(stu7==1);
}
//-----Z--------------------------------------
void wcom(uchar x)
{
uchar i=0;
check();
cs=1;
for(i=0;i<8;i++)
{
if(i<5)sid=1;
else sid=0;
sclk=0;
sclk=1;
}
for(i=0;i<16;i++)
{
if(i<4||(i>=8&&i<=11))
{
x<<=1;
sid=CY;
}
else sid=0;
sclk=0; sclk=1;
}
cs=0;
}
//****************************************
void wdat(uchar x)
{
uchar i=0;
stu=x;
check();
cs=1;
for(i=0;i<8;i++)
{
if(i<5||i==6)sid=1;
else sid=0;
sclk=0;
sclk=1;
}
for(i=0;i<16;i++)
{
if(i<4||(i>=8&&i<=11))
{
x<<=1;
sid=CY;
}
else sid=0;
sclk=0; sclk=1;
}
cs=0;
}
void ShowMessage(uchar addr,uchar num,uchar *ptr)
{
uchar i;
wcom(addr);
for (i=0;i<num;i++) wdat(ptr[i]);
}
/*-----------------------------------------------------------------------------
----------------------------------------------------------------------初始化*/
void InitLcd()
{
wcom(0X30);
wcom(0X3C);
wcom(0X38);
wcom(0X01);
wcom(0X80);
check();
lcdsplycnt=0;
ShowMessage(0x80,13,"你好,小笨笨:");
ShowMessage(0x90,15,"网助计划欢迎您!");
}
/*-----------------------------------------------------------------------------
----------------------------------------------------------------------初始化*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -