📄 lcm09cy2.c
字号:
#include "C:\Cygnal\IDEfiles\C51\Inc\c8051F000.h"
#define NUM 10
sbit DATA=P3^2;
sbit WR=P3^1;
sbit CS=P3^0;
unsigned char xdata gval;
unsigned char xdata gaddr;
unsigned char gdot=0;
unsigned char gptr=0;
unsigned char xdata gbuf[]="35.79";
unsigned char xdata gnum[]={0x7d,0x05,0x5b,0x1f,0x27,0x3e,0x7e,0x15,0x7f,0x3f};
void delay(unsigned long i);
void port_init(void);
void lcd_init(unsigned int command);
void sysclock_init(void);
void wr_data(unsigned char dat);
void wr_com_addr(unsigned char com,unsigned char addr);
void clear_screen(void);
void disp_data(unsigned char value);
void display(unsigned char addr,unsigned char dat);
void main(void)
{
EA=0;
WDTCN=0x0de;
WDTCN=0x0ad;
EA=1;
port_init();
//sysclock_init();
lcd_init(0x0848); //初始化
lcd_init(0x0802); //开振荡器
lcd_init(0x0806); //开显示器
clear_screen();
gaddr=25;
while(gbuf[gptr]!=0)
{
if(gbuf[gptr]=='.')
{
gdot=1;
gptr++;
continue;
}
if(gdot==1)
{
disp_data(gbuf[gptr++]);
gval|=0x80;
display(gaddr,gval);
gaddr+=4;
gdot=0;
}
else
{
disp_data(gbuf[gptr++]);
display(gaddr,gval);
gaddr+=4;
}
}
while(1);
}
void lcd_init(unsigned int com)
{
unsigned char i;
com<<=4;
CS=1;
delay(NUM);
WR=1;
delay(NUM);
CS=0;
delay(NUM);
for(i=0;i<12;i++)
{
WR=0;
delay(NUM);
DATA=(bit)(com&0x8000);
com<<=1;
WR=1;
delay(NUM);
}
CS=1;
delay(NUM);
}
void port_init(void)
{
XBR0=0x85; //CP0,UATR,SMB0
XBR1=0;
XBR2=0x40; //弱上拉允许
PRT0CF=0x1f;
PRT3CF=0x07;
}
void delay(unsigned long i)
{
while(i--);
}
void sysclock_init(void)
{
unsigned int i;
OSCXCN=0x65; //晶体振荡器方式1分频,fsysclock=1.8432mhz;
for(i=0;i<5000;i++); //延时1ms
while(!(OSCXCN&0x80)); //检查XTLVLD=1?
OSCICN=0x08; //切换到外部振荡器
}
void wr_com_addr(unsigned char com,unsigned char addr)
{
unsigned char i;
com<<=5;
addr<<=2;
CS=1;
delay(NUM);
WR=1;
delay(NUM);
CS=0;
delay(NUM);
for(i=0;i<3;i++)
{
WR=0;
delay(NUM);
DATA=(bit)(com&0x80);
com<<=1;
WR=1;
delay(NUM);
}
for(i=0;i<6;i++)
{
WR=0;
delay(NUM);
DATA=(bit)(addr&0x80);
addr<<=1;
WR=1;
delay(NUM);
}
}
void wr_data(unsigned char dat)
{
unsigned char i;
for(i=0;i<4;i++)
{
WR=0;
delay(NUM);
DATA=(bit)(dat&0x80);
dat<<=1;
WR=1;
delay(NUM);
}
CS=1;
delay(NUM);
}
void clear_screen(void) //清屏
{
unsigned char i,j=48;
unsigned char dat;
wr_com_addr(0x05,0x00);
while(j--)
{
dat=0;
for(i=0;i<4;i++)
{
WR=0;
delay(NUM);
DATA=(bit)(dat&0x80);
dat<<=1;
WR=1;
delay(NUM);
}
}
CS=1;
delay(NUM);
}
void disp_data(unsigned char value)
{
switch(value)
{
case '0': gval=gnum[0];break;
case '1': gval=gnum[1];break;
case '2': gval=gnum[2];break;
case '3': gval=gnum[3];break;
case '4': gval=gnum[4];break;
case '5': gval=gnum[5];break;
case '6': gval=gnum[6];break;
case '7': gval=gnum[7];break;
case '8': gval=gnum[8];break;
case '9': gval=gnum[9];break;
default : break;
}
}
void display(unsigned char addr,unsigned char dat)
{
wr_com_addr(0x05,addr);
wr_data(dat);
addr+=2;
dat<<=4;
wr_com_addr(0x05,addr);
wr_data(dat);
}
/* while(gbuf[gptr]!=0)
{
if(gbuf[gptr]=='.')
{
gdot=1;
gptr++;
continue;
}
if(gdot==1)
{
disp_data(gbuf[gptr++]);
gval|=0x80;
wr_com_addr(0x05,gaddr);
wr_data(gval);
gval<<=4;
gaddr+=2;
wr_com_addr(0x05,gaddr);
wr_data(gval);
gaddr+=2;
gdot=0;
}
else
{
disp_data(gbuf[gptr++]);
wr_com_addr(0x05,gaddr);
wr_data(gval);
gval<<=4;
gaddr+=2;
wr_com_addr(0x05,gaddr);
wr_data(gval);
gaddr+=2;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -