1、 单片机单片机课程设计报告课程设计报告 课课 程程 单片机课程设计单片机课程设计 设计设计题目题目 串行数据接收器串行数据接收器 3 3 1 设计题目设计题目: 一、一、 要求要求 1、 了解键盘扫描程序,实现对按下键键值的检测与传送。 2、 熟悉掌握keil的使用和STC ISP的使用。 3、 熟练掌握用C51编程的方法,掌握单片机工作方式。 4、 掌握LCD显示原理,能够利用LCD显示文字等。 二、二、 分析分析 本设计要求做串口数据接收器,扫描键盘按下的键值作为输入,经串口发送给本 机串口接收端。接收的键值送 12864LCD 显示的过程, 三、三、 设计设计 1、硬件设计、硬件设计 1
2、、设计说明 本设计是基于 AT89C51 的串行数据接收器,由矩阵键盘电路的扫描程序,得到 按下键的键值。将检测到的键值送串行数据发送端,即 AT89C51 单片机的 P3.0 口。将 AT89C51 单片机的串行数据发送端与串行数据接收端,将串行数据接收端 的数据送 12864LCD 显示。 2、硬件连接图 2、软件编程(包括流程图、完整的汇编源程序及其注释)、软件编程(包括流程图、完整的汇编源程序及其注释) 1、流程图 2 主程序流程图 键盘扫描程序 开始 读取键盘键 将读取的键值送输 出缓存器 SBUF 读 取 输 入 缓 存 器 SBUF 的值 将 SBUF 的值送 LCD 显示 3
3、2、源程序 #include #include #include #define COM8155 XBYTE0x1000 #define PA8155 XBYTE0x1001 #define PB8155 XBYTE0x1002 #define PC8155 XBYTE0x1003 #define uint unsigned int #define uchar unsigned char sbit LCM12864_RS=P15; sbit LCM12864_RW=P16; sbit LCM12864_EN=P17; sfr LCM12864_DPORT=0xA0; uchar lcm1286
4、4_font ; code unsigned char key_code=0x11,0x12,0x14,0x18, 0x21,0x22,0x24,0x28, 0x41,0x42,0x44,0x48, 0x81,0x82,0x84,0x88; LCD 初始化 测试 LCD 是 否处于忙碌状 态 写入待显示字符 4 unsigned char led_data8=16,16,16,16,16,16,16,16; void delay_ms(unsigned char n); unsigned char key_read(void); void lcm12864_busy(void); void l
5、cm12864_disp(uchar x,uchar y,uchar *ch,uchar n);/显示汉字或字符显示汉字或字符,x显示显示 行位置(行位置(0-3) ,) ,y显示列位置(显示列位置(0-7),*chn 待显字符串指针待显字符串指针,n显示个数(显示个数(=64) void lcm12864_init(void);/液晶显示器初始化光标的移动方向液晶显示器初始化光标的移动方向,光标左光标左/右移动右移动 10H/14H ,整体显示左整体显示左/右移动右移动 18H/1C void lcm12864_wr(uchar md,uchar dt);/送指令或数据送指令或数据, md=
6、“0“ 命令命令, md=“1“ 数据数据, dt 为送入的命令或数据的值为送入的命令或数据的值 void main(void) unsigned char key_now,key_last; int j=0; delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(100); COM8155=0x03; key_last=0xff; while(1) PCON=0x00; SCON=0x50; TMOD=0x20; TH1=0xF4; TL1=0xF4; TR1=1; SBUF=key_read(); RI=0; key_now=SBUF; TI=0; if(key_now!=0xff) switch(key_now) 5 case 0x00: lcm12864_font1=0