关于12864制作一个秒表程序

更新时间:2023-09-05 12:52:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

初学者编写,谢谢各位

12864应用实例-秒表

12864是一块128*64的图形显示液晶,在单片机学习领域有着极为广泛的应用,在这里对12864的图形取模, 以及程序编写进行一个51单片机的初步示范,程序为本人借鉴各位网络大神的程序自行综合编写的,如有雷同,呵呵…….

首先是图形函数取模部分:

1. 打开取模软件ZIMO21

2. 打开一张图片,注意图片的格式需为128*64点阵,BMP单色位图格式,可以先用画图程序对图片进行编辑。

3.设置参数:取模方式为C51。

初学者编写,谢谢各位

将取出的代码保存,并且复制到程序的“请输入图形代码” 函数内部。

4.示范程序:

#include<reg52.h> //载入52单片机函数库

#include<intrins.h> //载入位移动函数库

#define uint unsigned int //定义int

#define uchar unsigned char //定义char

#define lcddata P0 //定义端口

sbit rs=P3^5; //数据/命令选择端

sbit rw=P3^6; //读/写 选择端

sbit e=P3^4; //使能信号

sbit busy=P0^7; //忙时检测

uchar code dis1[]={"00"};

uchar code end[]={"时间结束"};

uchar code end2[]={"TIME OVER"};

//uchar code dis1[]={"1234567890"};

uchar code tab[]= //此处请输入图形代码

{

初学者编写,谢谢各位

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x7E,0x01,0x80,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xBE,0x01,0x80,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0xC4,0x03,0x80,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0xE4,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0xF4,0x06,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x8F,0xFC,0x1C,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC3,0xFF,0xF8,0x60,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xE0,0xFF,0xF0,0x30,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x03,0x80,0x00,0x1F,0x63,0xFF,0xE0,0x30,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x03,0xF0,0x00,0x7F,0xF6,0x3F,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x01,0xFF,0xE0,0xE1,0xFC,0x3F,0x80,0x30,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0xCF,0xF9,0xC0,0xF0,0x3F,0x00,0x30,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0xC1,0xFF,0x80,0xF0,0x3F,0x00,0x70,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x60,0xFF,0x80,0x60,0x3E,0x0E,0x60,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x60,0x3F,0x07,0x08,0x3E,0x1E,0xE0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x63,0x9F,0x1F,0x0C,0x3E,0x3E,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x61,0xFC,0x7F,0x0C,0x3E,0x7C,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x61,0xF1,0xE6,0x1E,0x3E,0xF9,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x60,0xE3,0x86,0x76,0x3F,0xF9,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x61,0xC6,0x06,0xE6,0x1F,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x31,0x8C,0x0F,0x86,0x1F,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x3B,0x38,0x0F,0x06,0x1F,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,

0x03,0x80,0x00,0x00,0x1F,0x70,0x1C,0x06,0x1F,0xC0,0x60,0x00,0x00,0x00,0x00,0x00,

0x1F,0xFF,0x80,0x00,0x0E,0xE0,0x18,0x06,0x1F,0xFE,0x60,0x00,0x00,0x00,0x00,0x00,

0x3F,0xFF,0xF8,0x1E,0x0E,0xFC,0x30,0xE6,0x1F,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,

初学者编写,谢谢各位

0x3F,0xFF,0xFF,0xFF,0x8F,0xFC,0x63,0xE6,0x0F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,

0x7F,0xC1,0xFF,0xFF,0xEF,0xF8,0xFF,0xC6,0x0F,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,

0x7E,0x03,0xFF,0xC0,0x7F,0xE3,0xFF,0xF6,0x0F,0xFF,0xC0,0x3F,0xF0,0x00,0x00,0x00,

0x7C,0x0F,0xFF,0xC0,0x3C,0x7F,0x00,0x7F,0x0F,0xFC,0x00,0x07,0xFC,0x00,0x00,0x00,

0xFC,0x3F,0xFF,0xE0,0x10,0x3C,0x01,0xFF,0x8F,0x80,0x00,0x00,0xFE,0x00,0x00,0x00,

0xFF,0xFF,0xFF,0xE0,0x00,0x38,0x0F,0x01,0x0F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,

0xFF,0xFF,0xFF,0xC0,0x00,0x18,0x70,0x00,0x06,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,

0xFF,0xFF,0xFF,0x80,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,

0x7F,0xFF,0xFF,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,

0x7F,0xFF,0xFE,0x00,0x00,0x00,0x0F,0x80,0x00,0x10,0x00,0x00,0x70,0x00,0x00,0x00,

0x7F,0xFF,0xF8,0x00,0x00,0x00,0x1F,0xE0,0x00,0x30,0x00,0x20,0x70,0x00,0x00,0x00,

0x3F,0xFF,0xE0,0x00,0x00,0x00,0x3C,0x20,0x00,0x70,0x02,0x30,0x70,0x00,0x00,0x00,

0x1F,0xFF,0xC0,0x00,0x00,0x00,0x0C,0x00,0x01,0xE0,0x07,0x60,0x70,0x00,0x00,0x00,

0x1F,0xFF,0x80,0x00,0x00,0x00,0x0C,0x00,0x07,0x80,0x07,0xC0,0x70,0x00,0x00,0x00,

0x0F,0xFF,0x00,0x00,0x00,0x00,0x0E,0x00,0x1E,0x00,0x0F,0xC8,0x60,0x00,0x00,0x00,

0x03,0xFE,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x0D,0x88,0xE0,0x00,0x00,0x00,

0x00,0x7E,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x18,0x09,0xE0,0x00,0x00,0x00,

0x00,0x1E,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x18,0x1F,0xC0,0x00,0x00,0x00,

0x00,0x0F,0xE0,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x30,0x3F,0x80,0x00,0x00,0x00,

0x00,0x03,0xFE,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,0x70,0x3F,0x00,0x00,0x00,0x00,

0x00,0x00,0xFF,0x80,0x00,0x01,0xFF,0xE1,0xC0,0x00,0x60,0x70,0x00,0x00,0x00,0x00,

0x00,0x00,0x0F,0xE0,0x00,0x03,0x9F,0xB3,0xC0,0x00,0xC4,0xE0,0x00,0x00,0x00,0x00,

0x00,0x00,0x1F,0xF0,0x00,0x07,0x9F,0x9B,0xC0,0x01,0x8F,0xC0,0x00,0x00,0x00,0x00,

0x00,0x00,0x7F,0xF8,0x00,0x0F,0x1F,0x9E,0xC0,0x03,0x1F,0xC0,0x00,0x00,0x00,0x00,

0x00,0x00,0xF0,0x3E,0x00,0x1F,0x9D,0x0E,0xC0,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,

初学者编写,谢谢各位

0x00,0x01,0xC0,0x1F,0xFC,0xFF,0xF9,0x0C,0xC0,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,

0x00,0x03,0xF0,0x03,0xFF,0xF3,0x78,0x8C,0xE0,0x00,0x70,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0xF0,0x00,0x7F,0xC3,0x38,0x8D,0xF0,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x30,0x00,0x07,0x83,0x18,0x0F,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x60,0x00,0x03,0xE1,0x98,0x0F,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x30,0x00,0x00,0x01,0x98,0x0C,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x3C,0x00,0x00,0x01,0xFF,0x9C,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x1E,0x00,0x00,0x01,0xFF,0xF8,0x40,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x70,0xE0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x03,0xC4,0x00,0x00,0x00,0x01,0xC0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x01,0xF7,0x80,0x00,0x00,0x01,0x81,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x7F,0xE0,0x00,0xFF,0xC3,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x1F,0xFE,0x00,0x01,0xE7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x03,0xFF,0xC0,0x00,0x7F,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

void delaynms(uint aa) //延时程序

{

uchar bb;

while(aa--)

{

for(bb=0;bb<115;bb++)

初学者编写,谢谢各位

{

;

}

}

}

void busy_lcd(void) //忙时检测函数 无返回值

{

busy=1;

e=0;

rs=0;

rw=1;

e=1;

_nop_(); //等待 空指令 延时大约1us吧...汗颜

while(busy==1); //如果忙时为1

e=0; //关闭使能

}

void wr_i_lcd(comm) //液晶写入函数 指令

{

busy_lcd();

rs=0;

初学者编写,谢谢各位

rw=0;

e=1;

lcddata=comm;

_nop_();

e=0;

}

void wr_d_lcd(dat) //液晶写入函数 数据

{

busy_lcd(); //忙标志位检测

rs=1;

rw=0;

e=1;

lcddata=dat;

_nop_(); //等待

e=0;

}

void init_lcd(void) //初始化函数

{

wr_i_lcd(0x30); //写入基本指令集

delaynms(1); //延时

//wr_i_lcd(0x30); //再次写入基本指令集

//delaynms(1); 可以不要

初学者编写,谢谢各位

wr_i_lcd(0x0c); // 开启液晶显示 关掉游标

delaynms(1); //延时

wr_i_lcd(0x01); //清屏指令

delaynms(20);

wr_i_lcd(0x06); //光标右移动 整体不移动

}

void img_disp(uchar code *img) //图形显示函数 定义code*img为char型变量 最大256 数据指针指向code区

{

uchar i,j; //定义i,j

for(j=0;j<32;j++) //X轴有32个像素 依次读取 上半屏幕 地址计数器为8x64个地址

{

for(i=0;i<8;i++) //读取y轴8个位 每读取一次地址计数器自动加一

{

wr_i_lcd(0x34); //绘图功能关闭

wr_i_lcd(0x80+j); //写入指令 位置为0x80加上j的值 水平坐标

wr_i_lcd(0x80+i); //写入指令 位置为0x80+i的值 寻址初值坐标

wr_i_lcd(0x30); //基本指令集合

wr_d_lcd(img[j*16+i*2]); //写入d15-d8数据 这里是写入函数了就是16个像素的前八个 乘以16代表每行移动了16个字符 乘以2代表一个要读取2个字符的数据

wr_d_lcd(img[j*16+i*2+1]); //写入d7-d0数据 就是16个像素的后八个 +1是因为后八个像素读取的是第二个数据

初学者编写,谢谢各位

}

}

for(j=32;j<64;j++) //下半屏幕

{

for(i=0;i<8;i++)

{

wr_i_lcd(0x34); //关闭绘图功能 此为扩充指令集

wr_i_lcd(0x80+j-32); //将水平坐标写入ram区

wr_i_lcd(0x88+i); //将垂直坐标写入ram区

wr_i_lcd(0x30); //进入基本指令集

wr_d_lcd(img[j*16+i*2]); //将d15-d8写入ram 就是16个像素的前八个 wr_d_lcd(img[j*16+i*2+1]); //将d7-d0写入ram 就是16个像素的后八个 }

}

wr_i_lcd(0x36); //开启绘图显示功能

}

void over_time()

{

uchar x,y,z; wr_i_lcd(0x30); //先开启基本指令集功能

wr_i_lcd(0x86); //第一行倒数第二位

wr_d_lcd(dis1[0]);

wr_i_lcd(0x87); //第一行倒数第二位 wr_d_lcd(dis1[1]);

初学者编写,谢谢各位

delaynms(10); //延时

for(z=0;z<5;z++) //计时调整 z为秒数

{ x=z/10; y=z%10; wr_i_lcd(0x86); //复位 wr_d_lcd(x+0x30); //显示 wr_i_lcd(0x87); //复位 wr_d_lcd(y+0x30); //显示

delaynms(1000); //延时

} }

void end_time() //结束语函数

{ uchar x;

wr_i_lcd(0x30);

delaynms(5); wr_i_lcd(0x92); delaynms(5); for(x=0;x<8;x++) //注意,中文一个占用2个位 { wr_d_lcd(end[x]);

初学者编写,谢谢各位

}

x=0;

wr_i_lcd(0x30);

delaynms(5);

wr_i_lcd(0x89);

delaynms(5);

for(x=0;x<11;x++) //注意,中文一个占用2个位 {

wr_d_lcd(end2[x]);

}

}

void main(void) //主程序 无返回值

{

while(1) //循环

{

init_lcd(); //初始化

img_disp(tab); //显示图形

over_time();

wr_i_lcd(0x01); //计时结束清屏

end_time();

while(1);//显示图形定位

}

}

尼古拉斯@特斯拉

本文来源:https://www.bwwdw.com/article/xi3i.html

Top