📄 s51.c
字号:
/*******************************************************************
compiler: keil c51
controller:AT89S51/52 11.0592M晶振
程序功能:122*32点阵式LCD显示 测试实验
版权所有:www.mcudriver.cn
********************************************************************/
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <REG51.H>
/*************************液晶显示地址定义*************************/
sbit LCD_Reset=P1^1;
sbit LCD_RS=P1^3;
sbit LCD_RW=P1^4;
sbit LCD_E1=P1^0;
sbit LCD_E2=P2^2;
unsigned char character[8]={0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00};//"2"
void pause(void)
{
unsigned char ptime;
for(ptime=0;ptime<8;ptime++);
}
void delay(unsigned char tt)
{
unsigned char tlime;
unsigned int ptime;
for(tlime=0;tlime<tt;tlime++)
{
for(ptime=0;ptime<1200;ptime++);
}
}
//左半屏,送命令字函数
void send_dat_left(unsigned char d)
{
LCD_RW=0;//R/W=0
LCD_RS=0;//D/I=0
//LCD_E1=0;
pause();pause();
LCD_E1=1;
P3=d;
pause();pause();pause();pause();
LCD_E1=0;pause();
LCD_E1=1;
}
//左半屏,送数显示函数
void send_dat_disp_left(unsigned char d)
{
LCD_RW=0;
LCD_RS=1;
//LCD_E1=0;
pause();pause();
LCD_E1=1;
P3=d;
pause();pause();
LCD_E1=0; pause();
LCD_E1=1;
}
//右半屏,送命令字函数
void send_dat_right(unsigned char d)
{
LCD_RW=0;//R/W=0
LCD_RS=0;//D/I=0
LCD_E2=0;
pause();pause();pause();pause();
LCD_E2=1;
P3=d;
pause();pause();pause();pause();
LCD_E2=0;pause();pause();pause();LCD_E2=1;
}
//右半屏,送数显示函数
void send_dat_disp_right(unsigned char d)
{
LCD_RW=0;
LCD_RS=1;
LCD_E2=0;
pause();pause();pause();pause();
LCD_E2=1;
P3=d;
pause();pause();pause();pause();
LCD_E2=0;pause();pause();pause();LCD_E2=1;
}
unsigned char CMDCODE,DAT;
void sed1520_init(void)
{
CMDCODE=0xE2;send_dat_left(CMDCODE);send_dat_right(CMDCODE); //RESET
// CMDCODE=0xA4;printmcmd();printscmd(); //NORMAL DRIVE
CMDCODE=0xA9;send_dat_left(CMDCODE);send_dat_right(CMDCODE); // DUTY=1/32
// CMDCODE=0xA0;printmcmd();printscmd(CMDCODE); //select ADC
CMDCODE=0xD0;send_dat_left(CMDCODE);send_dat_right(CMDCODE); //START LINE
CMDCODE=0xAF;send_dat_left(CMDCODE);send_dat_right(CMDCODE); //DISP ON
}
void led_disptl(unsigned char *p)
{
unsigned char i;
unsigned char ch;
for(i=0;i<8;i++) {
ch=*p;
p++;
send_dat_disp_left(ch);
send_dat_disp_right(ch);
}
}
//122*32液晶屏测试函数:
void lcd122x32test(void)
{
unsigned int i,j;
pause();pause();pause();
//满屏幕显示,左半屏显示点,右半屏显示横杠
for(i=0;i<4;i++)
{
CMDCODE=0xB8|i;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
CMDCODE=0x00;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
for(j=0;j<122;j++) {CMDCODE=j;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
DAT=0x55; send_dat_disp_left(DAT);send_dat_disp_right(DAT);}
}
for(i=0;i<4;i++)
{
CMDCODE=0xB8|i;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
CMDCODE=0x00;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
for(j=0;j<61;j=j+2) {CMDCODE=j;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
DAT=0xff; send_dat_disp_left(DAT);send_dat_disp_right(DAT);
DAT=0x00; send_dat_disp_left(DAT);send_dat_disp_right(DAT);}
}
for(i=0;i<4;i++)
{
CMDCODE=0xB8|i;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
CMDCODE=0x00;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
for(j=0;j<61;j=j+2) {CMDCODE=j;send_dat_left(CMDCODE);send_dat_right(CMDCODE);
DAT=0x55; send_dat_disp_left(DAT);send_dat_disp_right(DAT);
DAT=0xaa; send_dat_disp_left(DAT);send_dat_disp_right(DAT);}
}
//显示4个字符2:
CMDCODE=0xB8|2;send_dat_left(CMDCODE);
CMDCODE=0x00;send_dat_left(CMDCODE);
led_disptl(character); led_disptl(character);
led_disptl(character); led_disptl(character);
}
void main(void)
{
delay(10);
LCD_Reset=0;
delay(40);
LCD_Reset=1; delay(20);
sed1520_init();
delay(10);
lcd122x32test();
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -