单片机89S52小游戏1602显示

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

百度贴吧,中国南车1985编写

C程序源码:

/*********************************************

猜图案小游戏,通过4*4矩阵键盘下注,键值按从上

到下,从左到右依次为0~16。

**********************************************/

#include

#include "stdlib.h" //后面ran()随机函数调用,必须先声明

#include

#include //后面要调用strlen()函数,必须声明#define uchar unsigned char

#define uint unsigned int

sbit key_a=P1^0;

sbit key_b=P1^1;

sbit key_c=P1^2;

sbit key_d=P1^3;

sbit key_1=P1^4;

sbit key_2=P1^5;

sbit key_3=P1^6;

sbit key_4=P1^7;

sbit rs=P2^5;

sbit rw=P2^6;

sbit ep=P2^7;

unsigned char code dis_num[]={"0123456789abcdef"};

unsigned char code dis2[]={'7','4','1','.','8','5','2','0','9','6','3','=','/','*','-','+','\0'};//键盘按键值

unsigned char a[8];

uchar code zf1[8][8]={

//自定义字符字模表1

0x04,0x0e,0x0f,0x1f,0x1e,0x0e,0x04,0x00, //方块

0x04,0x0e,0x1f,0x1f,0x1f,0x04,0x0e,0x00,

0x0e,0x0e,0x1f,0x1f,0x1f,0x04,0x0e,0x00,

0x00,0x0a,0x1f,0x1f,0x1f,0x0e,0x04,0x00,

0x04,0x04,0x0e,0x1f,0x0e,0x04,0x04,0x00,

0x1b,0x1b,0x00,0x1b,0x00,0x1b,0x1b,0x00,

0x04,0x04,0x1b,0x04,0x1b,0x04,0x04,0x00,

0x04,0x0c,0x1c,0x1e,0x0f,0x06,0x04,0x00

};

uchar code zf2[8][8]={

//自定义字符字模表2

0x04,0x0e,0x1e,0x1b,0x0f,0x0e,0x04,0x00,

0x09,0x1b,0x1f,0x0e,0x1f,0x1b,0x12,0x00,

0x0e,0x1f,0x1f,0x1f,0x1f,0x1f,0x0e,0x00,

0x1f,0x1f,0x15,0x1f,0x15,0x1f,0x1f,0x00,

0x0e,0x0a,0x04,0x15,0x15,0x0e,0x04,0x00,

0x04,0x1f,0x15,0x04,0x0e,0x1b,0x0e,0x00,

0x00,0x00,0x0a,0x00,0x11,0x0e,0x00,0x00,

0x0e,0x11,0x1b,0x11,0x15,0x1b,0x0e,0x00

};

void delay(unsigned char ms) //延时函数

{

unsigned char i;

while(ms--)

{

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

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

bit lcd_bz() //测忙函数

{

bit result;

rs=0; //1602的HD44780芯片时序表:R=L,W=H,E=H为读状态,且由D7位输出状态:H为忙,L为不忙

rw=1;

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=(bit)(P0&0x80); //判断D7位状态并赋给result返回

ep=0;

return result;

}

void lcd_wcmd(unsigned char cmd) //写指令函数

{

while(lcd_bz());//判断LCD是否忙碌每次读写指令必须先测忙

rs=0; //S=L,W=L,e为高脉冲(即L-H——L)。为写指令 rw=0;

ep=0;

_nop_();

_nop_();

P0=cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

ep=0;

}

void lcd_pos(unsigned char row,pos) //光标位置设定函数,因高定光标必须要求D7=1;

{

if(row==1)

lcd_wcmd(pos-1|0x80); //光标第一行位置设定函数0x00位开始,

else

lcd_wcmd(pos-1|0xc0); //光标第二行位置设定函数起始位0x40,

}

void lcd_wdat(unsigned char dat) //写数据函数

{

while(lcd_bz());//判断LCD是否忙碌

rs=1;

rw=0;

ep=0;

P0=dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

ep=0;

}

相关文档
最新文档