单片机设计程序.docx
- 文档编号:17512764
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:12
- 大小:16.18KB
单片机设计程序.docx
《单片机设计程序.docx》由会员分享,可在线阅读,更多相关《单片机设计程序.docx(12页珍藏版)》请在冰点文库上搜索。
单片机设计程序
#include<>
#include<>
#include<>
#include<>
#definenop()_nop_();
#defineceXBYTE[0x7fff]
sbitd_i=P3^4;
unsignedchar*p;
unsignedchar*q;
unsignedchar*r;
unsignedchar*s;//以下的变量比较多,建议用结构体
unsignedintsize_lie=240;//LCD象素点的列数目,例如240128的屏是240
unsignedintsize_hang=64;//LCD象素点的行数目,例如240128的屏是128
unsignedinttextsize;//LCDtext区域空间,一般是LCD象素的实际大小,例如240128:
(240/3)*128
unsignedintgraphicsize;//LCDgraphic区域空间,一般是LCD象素的实际大小,例如240128:
(240/3)*128
unsignedchartextsize_h;//textsize的高字节
unsignedchartextsize_l;//低字节
unsignedchargraphicsize_h;//graphic的高字节
unsignedchargraphicsize_l;//TEXT区域的起始地址
unsignedchartext_startaddr_h;//高字节,
unsignedchartext_startaddr_l;//低字节
unsignedintgraphic_startaddr;//graphic区域的首地址
unsignedchargraphic_startaddr_h;
unsignedchargraphic_startaddr_l;
unsignedchar*p;//指针变量
unsignedchar*q;
unsignedchar*r;
unsignedchar*s;
unsignedcharbdataflag;
unsignedcharcodeh8O[3]={0x18,0x28,0x79};
unsignedcharcodetableindex[48]={
0,0,0,0,0,1,2,3,4,0,0,0,0,//吉林大学
};
//每个字符代码所占的空间=8字节
//===============数组:
"液晶"16*16===============
unsignedcharcodeCGTAB[992]={//共4个汉字,字体:
宋体,大小:
-12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*吉CBCAA*/
0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x08,0x7F,0xFC,0x00,0x00,0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,
/*林CC1D6*/
0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0xFD,0xFE,0x10,0x20,0x10,0x60,0x38,0x70,0x34,0xB0,0x54,0xA8,0x51,0x28,0x92,0x26,0x14,0x24,0x10,0x20,0x10,0x20,0x10,0x20,
/*大CB4F3*/
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x02,0x80,0x02,0x80,0x02,0x40,0x04,0x40,0x04,0x20,0x08,0x10,0x10,0x18,0x20,0x0E,0x40,0x04,
/*学CD1A7*/
0x01,0x08,0x10,0x8C,0x0C,0xC8,0x08,0x90,0x7F,0xFE,0x40,0x04,0x8F,0xE8,0x00,0x40,0x00,0x80,0x7F,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x02,0x80,0x01,0x00
};
//写数据
voidwdata(unsignedcharcom)//PR14
{
d_i=0;//数据
nop();
ce=com;//送出数据
nop();
}
//写命令
voidwcom(unsignedchardat)//wdata
{
d_i=1;//命令
nop();
nop();
ce=dat;
nop();
}
//查状态0和1位
voidcheck_sta01(void)
{
unsignedchartemp;
d_i=1;
while
(1)
{
nop();
nop();
nop();
temp=ce;
nop();
if((temp&0x03)==0x03)//STA0ANDSTA1
return;
}
}
//check_sta3
voidcheck_sta3(void)
{
unsignedchartemp;
d_i=1;//命令
while
(1)
{
temp=ce;
nop();
if((temp&0x08)==0x08)
return;
}
}
//双字节命令
voiddouble_byte_parameter(unsignedcharcoma,unsignedcharcomb,unsignedchardata_b)
{
check_sta01();
wdata(coma);
check_sta01();
wdata(comb);
check_sta01();
wcom(data_b);
}
//无参数命令
voidno_parameter(unsignedcharcom)
{
check_sta01();
wcom(com);
}
//清屏或全显
//state=0,TEXT区,vlaue=0,清屏,value=0xff,全显
voidall_display(unsignedcharstate,unsignedcharvlue)
{
unsignedinti;
if(state==0)
{
double_byte_parameter(text_startaddr_l,text_startaddr_h,0x24);
no_parameter(0xb0);
for(i=textsize;i>0;i--)
{
check_sta3();
wdata(vlue);
}
check_sta3();
wcom(0xb2);
}
else
{
double_byte_parameter(graphic_startaddr_l,graphic_startaddr_h,0x24);
no_parameter(0xb0);
for(i=graphicsize;i>0;i--)
{
check_sta3();
wdata(vlue);
}
check_sta3();
wcom(0xb2);
}
}
//TEXT模式下,写8X8字符
//hang:
1-size_hang/8
//lie:
1-size_lie/8
voiddisplay_ascii(unsignedchar*addr,unsignedcharhang,unsignedcharlie)
{
unsignedinttemp;
unsignedcharlow;
unsignedcharhigh;
temp=(size_lie/8)*(hang-1)+(lie-1);
/*TEXT模式下,TEXT区域被分为size_hang/8行、size_lie/8列个8X8点阵
行地址为0-(size_hang/8-1),列地址0-(size_lie/8-1)
注意,本程序的hang和lie都是从1开始的*/
low=temp&0x00ff;
high=(temp>>8)&0x00ff;
double_byte_parameter(low,high,0x24);
no_parameter(0xb0);
check_sta3();
wdata(*addr);//addr:
CGRAMORCGROM中字符的地址
check_sta3();
wcom(0xb2);//
}
voiddisplay8hotext(void)//TEXT模式下写调用CGROM中字符
{
unsignedinthang;
unsignedintlie;
for(hang=1;hang<=((size_hang*3/8)/8);hang++)//3/8屏字符8
{
for(lie=1;lie<=(size_lie/8);lie++)
display_ascii(&h8O,hang,lie);
}
for(hang=(((size_hang*3/8)/8)+1);hang<=(((size_hang*3/8)/8)+2);hang++)//2/8屏H
{
for(lie=1;lie<=(size_lie/8);lie++)
display_ascii(&h8O+1,hang,lie);
}
for(hang=(((size_hang*3/8)/8)+3);hang<=(((size_hang*3/8)/8)+5);hang++)//3/8屏O
{
for(lie=1;lie<=(size_lie/8);lie++)
display_ascii(&h8O+2,hang,lie);
}
}
/*显示汉字
hang1-size_hang/16,lie1-size_lie/16
addrCGRAM中字符的地址
四个8X8字符组成一个16X16的汉字字符*/
voiddisplayHZ_at_xyaddr(unsignedcharaddr,unsignedcharhang,unsignedcharlie)
{
unsignedinttemp;
unsignedcharlow;
unsignedcharhigh;
temp=(size_lie/8)*2*(hang-1)+2*(lie-1);
/*TEXT模式下,TEXT区域被分为size_hang/8行、size_lie/8列个8X8点阵
行地址为0-(size_hang/8-1),列地址0-(size_lie/8-1)
注意,本程序的hang和lie都是从1开始的,并且是16X16的*/
low=temp&0x00ff;
high=(temp>>8)&0x00ff;
double_byte_parameter(low,high,0x24);
no_parameter(0xb0);
check_sta3();
wdata(addr);//左上
check_sta3();
wdata(addr+2);//右上
check_sta3();
wcom(0xb2);
temp=(size_lie/8)*2*(hang-1)+(size_lie/8)+2*(lie-1);
//下半部分比上半部分的地址多(size_lie/8)
low=temp&0x00ff;
high=(temp>>8)&0x00ff;
double_byte_parameter(low,high,0x24);
no_parameter(0xb0);
check_sta3();
wdata(addr+1);
check_sta3();
wdata(addr+3);
check_sta3();
wcom(0xb2);
}
voiddisplayHZ()
{
unsignedcharj;
for(j=1;j<=15;j++)
{
displayHZ_at_xyaddr(0X80+tableindex[j-1+0+1]*4,2,j);
}
}
//graphic格式下显示8HO字符
voidCGRAM(void)
{
unsignedintm=0;
double_byte_parameter(0x07,0x00,0x22);//设定最高的1K为CGRAM
double_byte_parameter(0x00,0x3c,0x24);//
no_parameter(0xb0);
for(m=0;m<992;m++)
{
check_sta3();
wdata(CGTAB[m]);
}
check_sta3();
wcom(0xb2);
}
voiddelay1s(void)
{
unsignedinti;
unsignedintj;
for(i=0;i<1000;i++)
{
for(j=0;j<100;j++)
{j=j;}
}
}
voidmain(void)
{
delay1s();
textsize=graphicsize=size_lie/8*size_hang;
textsize_l=textsize;
textsize_h=textsize>>8;
graphicsize_h=graphicsize>>8;
graphicsize_l=graphicsize;
text_startaddr=0x0000;
text_startaddr_h=text_startaddr>>8;
text_startaddr_l=text_startaddr;
graphic_startaddr=text_startaddr+textsize;
graphic_startaddr_h=graphic_startaddr>>8;
graphic_startaddr_l=graphic_startaddr;
double_byte_parameter(text_startaddr_l,text_startaddr_h,0x40);//TEXT
double_byte_parameter((size_lie/8),0x00,0x41);
double_byte_parameter(graphic_startaddr_l,graphic_startaddr_h,0x42);
double_byte_parameter((size_lie/8),0x00,0x43);
no_parameter(0x80);//TEXTORGRAPHIC
no_parameter(0xa3);
CGRAM();
while
(1)
{delay1s();
all_display(0,0x00);
no_parameter(0x94);//文本模式开,图形模式关
displayHZ();
delay1s();
all_display(0,0x00);
display8hotext();
delay1s();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 设计 程序
![提示](https://static.bingdoc.com/images/bang_tan.gif)