这个设计是基于stc89c52单片机,以及基于lcd12864屏幕所设计的一款多菜单的游戏机,不过,相关性能有待提升。
文章目录- 前言
- 一、项目简介
- 二、设计思路
- 1.仿真图
- 2.部分代码
- 总结
前言
这个设计是我大一时,在封校的日子里,闲的没事,所以突发奇想就想设计一个游戏机,不过相关性能有待提升,其实也不是我能力太菜,具体的原因,我们下面再说。对了,有不对的地方,大家可以指出来,欢迎大家留言。
一、项目简介
这个设计是我一年前,也就是大二的时候所设计的,我当时看到b站上有几个博主发布了一段纯手工制作游戏机的视频后,超级羡慕,当时心头一热,就打算制作一个,现在想想还是太自不量力了,毕竟我当时还有很多东西不会,我也只会用51单片机,对其他单片机还不熟悉。这个设计是基于stc89c52单片机,这款单片机我比较熟练,相比与stm32系列的单片机,51单片机的性能是比较落后的,毕竟51单片机是89十年代的产品,无论是容量、计算能力、兼容性都比不上stm32系列的单片机,我这个作品其实它的主体框架已经基本构建完毕,但是把游戏函数装上去后,代码无法编译,因为代码太多了,有一千多行,以及远超51系列单片机的代码容量了。后来我就用stm32重新做了一个,效果还行。
言归正传,这款设计用的是AMPIRE16864的显示屏,在各大平台上都容易找到相对于的驱动代码,在下面的内容中我会详细介绍,单片机用52就够了,其他一些零部件,就不在这里详细说了。
二、设计思路 1.仿真图
上图就是仿真软件刚运行时的样子,图中屏幕左边显示“菜单”两字,屏幕右边显示的是四个具体的内容,还有一个箭头,我们可以通过按相应的按钮,来选择不同的功能,。
我们可以按第一个按钮,让箭头下移,如上图所示。
我们再按第二个按钮,就可以打开相应的功能了,由于代码太长,所以这个图像矩阵就没有往代码里方。
我们最后再按一下最下面的内个按钮,就会回到主菜单。
这样基本就实现了循环菜单的功能。
2.部分代码驱动函数;
void busy(){
P0=0x00;
RS=0;
RW=1;
E=1;
while(P0 & 0x80){;}
E=0;
}
void delay(uchar i){
uint n;
for(n=0;n
void clear(uchar screen){
uchar i,j;
screen1(screen);
for(i=0;i<8;i++){
page1(i);
lie1(0);
for(j=0;j<64;j++){
dat(0x00);
}
}
}
下面是相关的显示文字、数字、图像的代码;
void shon_word(uchar screen,uchar page,uchar lie,uchar *p){
uchar i;
screen1(screen);
page1(page);
lie1(lie);
for(i=0;i<16;i++){
dat(p[i]);
}
page1(page+1);
lie1(lie);
for(i=0;i<16;i++){
dat(p[i+16]);
}
}
void shon_numb(uchar screen,uchar page,uchar lie,uchar *p){
uchar i;
screen1(screen);
page1(page);
lie1(lie);
for(i=0;i<8;i++){
dat(p[i]);
}
page1(page+1);
lie1(lie);
for(i=0;i<8;i++){
dat(p[i+8]);
}
}
void shon_picture(uchar screen,uchar page,uchar lie,uchar *p){
uchar i;
screen1(screen);
page1(page);
lie1(lie);
for(i=0;i<128;i++){
dat(p[i]);
}
page1(page+1);
lie1(lie);
for(i=0;i<128;i++){
dat(p[i+128]);
}
page1(page+2);
for(i=0;i<128;i++){
dat(p[i+256]);
}
page1(page+3);
lie1(lie);
for(i=0;i<128;i++){
dat(p[i+384]);
}
page1(page+4);
for(i=0;i<128;i++){
dat(p[i+512]);
}
page1(page+5);
lie1(lie);
for(i=0;i<128;i++){
dat(p[i+640]);
}
page1(page+6);
for(i=0;i<128;i++){
dat(p[i+768]);
}
page1(page+7);
lie1(lie);
for(i=0;i<128;i++){
dat(p[i+896]);
}
}
总结
以上就是这个设计的简要概括,有错误请指出。
想要完整代码以及仿真文件的可以加QQ;2649191761



