📄 text1.c
字号:
#include<reg52.h>
#include<intrins.h>
#include<ziku.h>
#include<string.h>
#include<math.h>
/************************/
#define uchar unsigned char
#define uint unsigned int
/********总线以及地址线的定义************/
#define disp_on_12864 0x3f
#define disp_off_12864 0x3e
#define col_12864 0x40
#define row_12864 0xb8
#define start_line_12864 0xc0
#define lcd_bus_12864 P0
uchar x,z;
uchar y;
sbit di_12864 =P2^0;
sbit rw_12864 =P2^1;
sbit enable_12864 =P2^2;
sbit cs1_12864=P2^6;
sbit cs2_12864 =P2^7;
/************函数声明******************/
void clear_sreen_12864 (); //清屏(即清除显存)
void delay_12864 (); //延时1ms
void delay(void); //延时
void init_lcd_12864 (); //LCD初始化
void write_command_12864 (unsigned char cmdcode); //写指令
void write_data_12864 (unsigned char dispdata); //写数据
void rddata(void) ; //读数据
/**********清除显屏(清除显示内存)***********/
void clear_screen_12864()
{
unsigned char i,j;
cs1_12864 =0;cs2_12864=1; /**清除左屏**/
for(i=0;i<8;i++)
{
write_command_12864 (row_12864 +i);
write_command_12864 (col_12864 +0); //列地址0
for(j=0;j<64;j++)
write_data_12864 (0x00); //每做一次写操作,列地址加1
}
cs1_12864 =1;cs2_12864 =0; /**清除右屏**/
for(i=0;i<8;i++)
{
write_command_12864(row_12864 +i);
write_command_12864(col_12864+0); //列地址0
for(j=0;j<64;j++)
write_data_12864(0x00); //每做一次写操作,列地址加1
}
}
/***********延时1ms**************/
void delay_12864()
{ unsigned int dy=500;
while(--dy);
}
/*************初始化LCD屏***************/
void init_lcd_12864()
{
clear_screen_12864();
cs1_12864=1;cs2_12864=0; //右屏
delay_12864();
write_command_12864(disp_off_12864);
write_command_12864(start_line_12864);
write_command_12864(disp_on_12864);
cs1_12864=0;cs2_12864=1; //左屏
delay_12864();
write_command_12864(disp_off_12864);
write_command_12864(start_line_12864);
write_command_12864(disp_on_12864);
}
/*******写指令到LCD*********/
void write_command_12864 (unsigned char cmdcode)
{
//lcd_busy();
di_12864 =0;
rw_12864 =0;
lcd_bus_12864 =cmdcode; //输入控制命令(display on/off,display startline,row,col)
enable_12864 =1;
_nop_();
enable_12864 =0;
}
/***********写显示的数据到LCD***********/
void write_data_12864 (unsigned char dispdata)
{
//lcd_busy();
di_12864 =1;
rw_12864 =0;
lcd_bus_12864 =dispdata;
enable_12864 =1;
_nop_();
enable_12864 =0;
}
/*****位置 X 表示行, Y表示列 , Z 表示要亮的点 *********/
void write(x,y,uchar c)
{
z=c;
cs1_12864=0;
cs2_12864=1; //选择左屏幕
if (y>64)
{
y=y-64 ;
cs1_12864=1;
cs2_12864=0; //选择右屏幕
}
write_command_12864(row_12864+x-1); //8大行位置 X 1到 8
write_command_12864(col_12864+y-1); //128 列位置 y 1 到 128
write_data_12864(z);
}
uchar getkey()
{
unsigned char keycode=0xff,temp,i;
P1=0x0f;
temp=P1&0x0f;
if(temp!=0x0f) //判是否有键按下
{
// beep=0;
P1=0xef; //自第0行开始扫描输出,自列读入键值
for(i=0;i<4;i++)
{
temp=P1&0x0f;
if(temp==0x07) //判断第0列是否有键按下
{
keycode=i*4+0;
break;
}
else if(temp==0x0b)//判断第1列是否有键按下
{
keycode=i*4+1;
break;
}
else if(temp==0x0d)//判断第2列是否有键按下
{
keycode=i*4+2;
break;
}
else if(temp==0x0e)//判断第3列是否有键按下
{
keycode=i*4+3;
break;
}
P1=(P1<<1)|0x1;
}
while((P1&0x0f)!=0x0f) //等待释放
{
P2=0x0f;
}
// beep=1;
}
return keycode;
}
void rewrite(uchar c)
{
write(x,y,c);
y++;
if (y==129) {y=1;x++;}
if (x==9) { x=1;y=1;}
}
/****** 显示 dl*16(dl是宽,高度为16)的字 l是宽 h是行 dl字长********/
void xianshi(uchar s[],uchar l, uchar h)
{
uchar i,j,k;
k=y;
for(j=0;j<=h-1;j++)
{
for(i=0;i<=l-1;i++)
{
rewrite(s[i+(i/16)*16+j*16]);
}
x++;
if(y==1)x--;
y=k;
}
}
void caidan(uchar a)
{
uchar i,j,k;
for (i=0;i<=2;i++)
{
x=i*2+1;y=1;
if (i==a-1)
{
for(j=0;j<=1;j++)
{
for(k=0;k<=111;k++)
{
rewrite(0xff-c[a-1][k+(k/16)*16+j*16]);
}
x++;
if(y==1)x--;
y=1;
}
}
else
xianshi(c[i],112,2);
}
}
main()
{
float ss,q;
int p;
uchar k=0,key,s=1;
uint i,j;
init_lcd_12864();
clear_screen_12864();
cs1_12864=0;
cs2_12864=1; //选择左屏幕
x=1;
y=6;
for(j=0;j<=1;j++)
{
for(i=0;i<=118;i++)
{
rewrite(zx[i+(i/17)*17+j*17]);
}
x=2;
y=6;
}
x=7;y=1;
xianshi(nj,127,2);
//if (state==1)
while(1)
{
key=getkey();
x=1;y=1;
while (key==15)
{
clear_screen_12864();
x=1;y=1;
caidan(1);
key=18;
while(1)
{
key=getkey();
if (key==3)
{
s=s-1;
if(s==0)
s=3;
caidan(s);
}
if (key==11)
{
s=s+1;
if(s==4)
s=1;
caidan(s);
}
if(key==15 && s==1)
{
clear_screen_12864();
/*******************************画坐标轴 128*64 是 X坐标33行 Y坐标63列***********************************************/
x=5;y=1;
for (i=0;i<127;i++)
{
rewrite(1 );
}
x=4;y=125;
rewrite(0x20);
rewrite(0x40) ;
rewrite(0x80) ;
x=5;y=125;
rewrite(0x04) ;
rewrite(0x02);
rewrite(0x01);
x=1;y=60;
rewrite(0x04) ;
rewrite(0x02);
rewrite(0x01);
y++;
rewrite(0x01) ;
rewrite(0x02);
rewrite(0x04);
for (i=0;i<8;i++)
{y=63;
rewrite(0xff);
x++;
}
// while(1)
/********** 正弦函数**************/
{
for(q=0;q<2*3.1416;q=q+0.05)
{
ss=(sin(q)+1)*32;
p=ss;
x=(p/8)+1;
rewrite(pow(2,p%8));
/*
for(i=1;i<9;i++)
{
write(x-1,y+i,0x00) ;
write(x,y+i,0x00) ;
write(x+1,y+i,0x00) ;
}
*/
if(y==1)x--;
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -