单片机显示与按键项目报告 - 图文(3)

2019-03-22 12:57

电子信息工程技术专业《外围电路模块设计》 显示与按键

六、程序编程

1、1602LCD程序编写:

/******************************************************************** * 文件名 : 液晶1602显示.c

* 描述 : 该程序实现了对液晶1602的控制

***********************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

//这三个引脚参考资料 sbit E =P2^2; //1602使能引脚 sbit RW=P2^1; //1602读写引脚 sbit RS=P2^0; //1602数据/命令选择引脚

/******************************************************************** * 名称 : delay()

* 功能 : 延时,延时时间大概为140US。

***********************************************************************/ void delay() { int i,j; for(i=0; i<=100; i++); for(j=0; j<=20; j++); }

/******************************************************************** * 名称 : enable(uchar del) * 功能 : 1602命令函数 * 输入 : 输入的命令值

***********************************************************************/ void enable(uchar del) { P0 = del; RS = 0; RW = 0; E = 0; delay(); E = 1; delay(); }

/******************************************************************** * 名称 : write(uchar del)

11

电子信息工程技术专业《外围电路模块设计》 显示与按键

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据 * 输出 : 无

***********************************************************************/ void write(uchar del) { P0 = del; RS = 1; RW = 0; E = 0; delay(); E = 1; delay(); }

/******************************************************************** * 名称 : L1602_init() * 功能 : 1602初始化,

***********************************************************************/ void L1602_init(void) { enable(0x01); enable(0x38); //设置16*2显示,5*7点阵,8位数据接口 enable(0x0c); //设置开关显示,不显示光标 enable(0x06); //写一个字符后地址指针自动加1 enable(0xd0); //显示清0,数据指针清0 }

/******************************************************************** * 名称 : L1602_char(uchar hang,uchar lie,char sign)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示\,调用该函数如下 L1602_char(1,5,'b')

* 输入 : 行,列,需要输入1602的数据 * 输出 : 无

***********************************************************************/ void L1602_char(uchar hang,uchar lie,char sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign); //写符号 }

/******************************************************************** * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)

12

电子信息工程技术专业《外围电路模块设计》 显示与按键

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示\,调用该函数如下 L1602_string(1,5,\* 输入 : 行,列,需要输入1602的数据 * 输出 : 无

***********************************************************************/ void L1602_string(uchar hang,uchar lie,uchar *p) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); while(1) { if(*p == '\\0') break; write(*p); p++; } }

/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无

* 输出 : 显示第一行“2”,第二行“b”

***********************************************************************/ void Main() { uchar i = 48; L1602_init(); L1602_char(1,5,'b'); L1602_string(1,1,\ L1602_string(2,1,\ while(1); }

最后的显示结果图如下:

13

电子信息工程技术专业《外围电路模块设计》 显示与按键

图8 1602LCD显示结果

2、12864与按键程序编写:

#include #include

sbit lcd_sclk=P3^2; /*接口定义:lcd_sclk 就是 LCD 的 sclk*/ sbit lcd_sid=P3^1; /*接口定义:lcd_sid 就是 LCD 的 sid*/ sbit lcd_rs=P3^0; /*接口定义:lcd_rs 就是 LCD 的 rs*/ sbit lcd_reset=P1^0; /*接口定义:lcd_reset 就是 LCD 的 reset*/ sbit lcd_cs1=P1^1; /*接口定义:lcd_cs1 就是 LCD 的 cs1*/

sbit Rom_IN=P1^2; /*字库 IC 接口定义:Rom_IN 就是字库 IC 的 SI*/ sbit Rom_OUT=P1^3; /*字库 IC 接口定义:Rom_OUT 就是字库 IC 的 SO*/ sbit Rom_SCK=P1^4; /*字库 IC 接口定义:Rom_SCK 就是字库 IC 的 SCK*/ sbit Rom_CS=P1^5; /*字库 IC 接口定义 Rom_CS 就是字库 IC 的 CS#*/ #define uchar unsigned char #define uint unsigned int #define ulong unsigned long uchar code bmp1[]; uchar code bmp2[];

void transfer_command_lcd(int data1) {

char i; lcd_rs=0;

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

lcd_sclk=0;

if(data1&0x80) lcd_sid=1; else lcd_sid=0;

14

电子信息工程技术专业《外围电路模块设计》 显示与按键

lcd_sclk=1;

data1=data1<<=1; } }

/*写数据到LCD 模块*/

void transfer_data_lcd(int data1) {

char i; lcd_rs=1;

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

lcd_sclk=0;

if(data1&0x80) lcd_sid=1; else lcd_sid=0; lcd_sclk=1;

data1=data1<<=1; } }

/*延时*/

void delay(int n_ms) {

int j,k;

for(j=0;j

unsigned char Key_Scan(void)//键盘扫描函数如果有键按下返回键ASC 值若无返回 0 {

P2=0XF0;

if(P2!=0XF0)//先确定是否有键按下 {

//--------------1------------------------------------ P2=0XFE;

switch (P2)//测P1^0~~~P1^3 有没有低的 {

case 0xee: return '0';//P1^3 低返回'0' case 0xde: return '1';//P1^2 低返回'1' case 0xbe: return '2';//P1^1 低返回'2' case 0x7e: return '3';//P1^0 低返回'3'

default: break;//没有本行的键按下继续下面扫描 }

//---------------------------------------------------- //-------------2-------------------------------------- P2=0XFD;

switch (P2)//测P1^0~~~P1^3 有没有低的

15


单片机显示与按键项目报告 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年电力建设安规考试卷 (基建土建) 答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: