📄 12232.c
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include <stdio.h>
#define W_CM XBYTE[0x8000]; //;写指令代码地址A,CSA CSB高电平有效!
#define R_SM XBYTE[0x8200]; //;读状态字地址A
#define W_DM XBYTE[0x8100]; //;写显示数据地A
#define R_DM XBYTE[0x8300]; //;读显示数据地址A
#define W_CS XBYTE[0x9000]; // ;写指令代码地址B
#define R_SS XBYTE[0x9200]; // ;读状态字地址B
#define W_DS XBYTE[0x9100]; //;写显示数据地址B
#define R_DS XBYTE[0x9300]; //;读显示数据地址B
#define disp_on 0xaf //显示关闭
#define disp_off 0xae //显示打开
#define disp_start_line 0xc0 //显示起始地址
#define page_addr_set 0xb8 //页地址
#define col_addr_set 0x00 //列地址
#define status_busy 0x80 //0=ready
#define moderwite 0xee //写模式
#define dynamic_driver 0xa4 //动态驱动
#define adc_select 0xa0 //clockwise
#define clk32 0xa9 //刷新时钟设置1/32
#define clk16 0xa8 //刷新时钟设置1/16
#define reset 0xe2 //软件复位
#define uchar unsigned char
#define uint unsigned int
//设汉字的数据
uchar code num[11][16]=
{
0x00,0xe0,0x10,0x08,0x08,0x10,0xe0,0x00,0x00,0x0f,0x10,0x20,0x20,0x10,0x0f,0x00, //0
0x00,0x10,0x10,0xfb,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3f,0x20,0x20,0x00,0x00, //1
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, //2
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0e,0x00, //3
0x00,0x00,0xc0,0x20,0x10,0xf8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3f,0x24,0x00, //4
0x00,0xf8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0e,0x00, //5
0x00,0xe0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0f,0x11,0x20,0x20,0x11,0x0e,0x00, //6
0x00,0x38,0x08,0x08,0xc8,0x38,0x08,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00, //7
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1c,0x22,0x21,0x21,0x22,0x1c,0x00, //8
0x00,0xe0,0x10,0x08,0x08,0x10,0xe0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0f,0x00, //9
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00, //.
};
//判断主窗口忙
void wait_readym(void)
{
data uchar status;
status=R_SM;
_nop_();
while (status&status_busy);
}
//判断从窗口忙
void wait_readys(void)
{
data uchar status;
status=R_SS;
_nop_();
while (status&status_busy);
}
//发指令instruction到主窗口
void send_mi(uchar instruction)
{
wait_readym();//判断忙
XBYTE[0x8000]=instruction; // 写指令
}
//发数据到主窗口
void send_md(uchar c)
{
wait_readym(); //判断忙
XBYTE[0x8100]=c; //写数据
}
//发指令到从窗口
void send_si (uchar instruction)
{
wait_readys(); //判断忙
XBYTE[0x9000]=instruction;//写指令
}
//发数据到从窗口
void send_sd (uchar c)
{
wait_readys(); //判断忙
XBYTE[0x9100]=c;
}
//12232lcd初始化
void lcd_init(void)
{
send_mi(reset); //复位
send_si(reset);
send_mi(disp_off); //关闭显示
send_si(disp_off);
send_mi(dynamic_driver); //动态驱动
send_si(dynamic_driver);
send_mi(adc_select); //clockwise
send_si(adc_select);
send_mi(moderwite); //写模式结束
send_si(moderwite);
send_mi(col_addr_set); //归回零列,设定起始行首
send_mi(disp_start_line);
send_si(col_addr_set);
send_si(disp_start_line);
send_mi(disp_on); //开显示
send_si(disp_on);
}
//清屏函数
void lcd_clr(void)
{
uchar i,page;
for (page=0;page<4;page++)
{
send_mi(page_addr_set|page);
send_si(page_addr_set|page);
send_mi(0X00);
send_si(0X00);
for (i=0;i<62;i++)
{
send_md(0x00);
send_sd(0x00);
}
}
}
//同时设置主(右)从(左)显示页为0-3页
void set_page(uchar page)
{
send_mi(page_addr_set|page);
send_si(page_addr_set|page);
}
//同时设置主(右)从(左)显示列为0-61列
void set_address(uchar address)
{
send_mi(address&0x7f);
send_si(address&0x7f);
}
void putchar_l(uchar c)
{
send_md(c);
}
void putchar_r(uchar c)
{
send_sd(c);
}
//画图函数, col横坐标,layer,表示上下层,width是图形的可宽度,高固定为16 bmp图形指针
void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
{
uchar x;
uchar address;
uchar p=0;
uchar page=0;
uchar window=0;
uchar wid=width;
if(layer) page=2;
for(x=col;x<col+width;x++)
{
if(x>121)return; //防止显示乱码
if(x>60)
{
window=1;
address=x%60;
}
else
{
address=x;
}
set_page(page);
set_address(address);
if (window)
{
putchar_r(bmp[p]);
}
else
{
putchar_l(bmp[p]);
}
set_page(page+1);
set_address(address);
if(window)
{
putchar_r(bmp[p+width]);
}
else
{
putchar_l(bmp[p+width]);
}
p++;
width=wid;
}
}
//延时程序
void delay(uchar i)
{
uchar j,k;
for(k=i;k<255;k++)
for(j=0;j<255;j++)
{ j++;
j--;
}
}
//主函数
void main(void)
{ uchar i;
uchar j=0;
uchar k;
//P0=0xff;
//P1=0xff;
//P2=0xff;
//P3=0xff;
delay(100);
// lcd_init(); //初始化屏幕
// lcd_init();
lcd_init();
lcd_clr(); //清屏
i=27/10;
k=27%10;
//m=(27.3-i*10-k)/0.1;
draw_bmp(j,0,8,num[i]);
j=j+8;
draw_bmp(j,0,8,num[k]);
j=j+8;
draw_bmp(j,0,8,num[10]);
draw_bmp(2,1,8,num[8]);
//j=j+8;
//draw_bmp(j,0,8,num[m]);
//draw_bmp(1,0,8,num[10]);
//for(;;);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -