📄 lcdtest.c
字号:
/********************************
* PROGRAM FOR KEYPAD *
********************************/
#include<stdio.h>
#include<pic.h>
#include<PIC16f91x.h>
#include "math.h"
persistent unsigned char line[4];
persistent unsigned char start=0x00;
persistent unsigned char index=0x00;
void time_delay(int);
void ClearScreen();
void clear_line();
void InitLCD();
void display(unsigned char, unsigned char);
void add_disp(unsigned char);
unsigned char get_number(unsigned char);
#define RWCheck() { unsigned char sta; TRISD=0xff;RB0=1;RB1=0;RB2=0;RB3=1; do{ sta=PORTD & 0x03;} while(sta!=0x03); RB1=1;RB2=1;}
#define OutPortCom1(command) { RWCheck(); TRISD=0x00;RB0=1;RB1=1;RB2=0;RB3=0; PORTD = command; RB1=1;RB2=1;RB3=1; }
#define OutPortCom2(dat, command) { OutPortData(dat); OutPortCom1(command); }
#define OutPortCom3(data1, data2, command) { OutPortData(data1);OutPortData(data2); OutPortCom1(command);}
#define OutPortData(dat ) { RWCheck(); TRISD=0x00; RB0=0;RB1=1;RB2=0;RB3=0;PORTD = dat; RB1=1;RB2=1;RB3=1; }
void main()
{
int i=0;
unsigned char data=0x00;
unsigned char address=0x00;
TRISB=0xf0;
TRISD=0x00;
TRISC=0x17;
LCDCON=0x00;
InitLCD();
display('0',address);
while(1)
{
if(PORTC&0x17!=0x00)
{
data=get_number(PORTC&0x17);
// for(i=2;i>0;i--)
//{
// line[i+1]=line[i];
//}
line[0]=data;
}
for(i=0;i<3;i++)
{
if(line[i]>='0'&&line[i]<='9')
display(line[i],address);
else
display(' ',address);
address++;
}
address=0x00;
}
}
/* TRANSMISSION */
unsigned char get_number(unsigned char data)
{
switch (data)
{
case 0x05:
return '5';
case 0x02:
return '2';
case 0x01:
return '1';
case 0x10:
return '8';
case 0x15:
return 'd';
case 0x17:
return 'f';
default:
return '0';
}
}
void time_delay(int time)
{
int i;
for(i=0;i<time;i++)
{}
return;
}
void ClearScreen()
{
int i;
///////// 清显示 RAM 区 0000h--2000h (8k)
OutPortCom3(0x00,0x00,0x24); //设置指针地址0000H
OutPortCom1(0xb0); //设置自动写状态
for(i=0;i<128;i++) OutPortData(0x00); // data=0;
OutPortCom1(0xb2); // 自动写结束
}
void InitLCD()
{
OutPortCom3( 0x00,0x00,0x42 ); //设置图形显示区域首地址GraphAddr
OutPortCom3( 0x10,0x00,0x43 ); //设置图形显示区域宽度 : LineChar
OutPortCom3( 0x00,0x00,0x40 ); //设置图形显示区域宽度 : LineChar
OutPortCom3( 0x10,0x00,0x41 ); //设置图形显示区域宽度 : LineChar
// OutPortCom3( 0x00,0x00,0x42 ); //设置图形显示区域首地址GraphAddr
// OutPortCom3( 0x10,0x00,0x43); //设置图形显示区域宽度:10H
//OutPortCom1(0xa0); //设置光标形状 cursor size 8x8
OutPortCom1(0x80); //设置显示方式: CGROM方式 文本\图形 "或"
OutPortCom1(0x94); //设置显示开关: 1001 1100 图形
ClearScreen();
}
/* USART initializaton */
void display(unsigned char data, unsigned char address)
{
OutPortCom3(address,0x00,0x24);
OutPortCom2(data-' ',0xc4);
return;
}
void clear_line()
{
int i=0;
for(i=0;i<3;i++)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -