单片机原理及接口技术实验报告书 .docx
学生学号实验课 成绩学生实验报告书实验课程名称单片机原理及接口技术开课学院物流工程学院指导教师姓名学生姓名学生专业班级20182019 学年第 1 学期实验课程名称:单片机原理及接口技术实验项目名称电话键盘及拨号的模拟实验成绩实验者蒋绍勇专业班级机设1605组 别同组者无实验日期2018年11月2日1. 实验要求设计一个模拟电话拨号的显示装置,即把电话键盘中拨出的某一电话号码,显示在LCD显 示屏上。电话键盘共有12个键,除了 09的10个数字键之外,还有“*”键,用于实现删 除功能,即删除一位最后输入的号码;“#”键用于清除显示屏上所有的数字显示。还要求 每按下一个键要发出声响,以表示按下该键。2. 实验原理本题目涉及单片机与4x3矩阵式键盘的接口设计以及与16x2的液晶显示屏的接口设计,以 及如何驱动蜂鸣器。液晶显示屏采用LM016L(LCD1602)LCD,显示共2行。,每行16个字 符。第一行为设计者信息,第二行显示开始显示所拨的电话号码,最多为16位(因为LCD 的一行能显示16个)3. 系统电路的设计要求包括内容:电路原理图,电子元器件型号和数量表格,电路工作原理的重点说明电子元器件型号及数量电子元器件名称型号数量单片机AT89C511液晶显示屏LM016L1排阻RESPACK-81扬声器SPEAKER1滑动变阻器POT-LIN1开关BUTTON12原理说明:P0 口接4 x 3的矩阵按键,P1 口接LCD液晶显示屏,P2.0、P2.1、P2.2引脚分别连接LCD1602 的RE、RS、E; P2.3引脚控制扬声器。P0 口检查键盘是否按下,有键盘按下,P2.3输出高电 平,扬声器发声。并读出按下的数据,并将通过P1将数据写入LCD中.原理图U "Hv F:"XF!心皿piFrnXTALlXTAL2一一qq有专 H1112Uqqq17-ira.i 酒SPSE4JALEP2.'A12反FZi'AliP2.WA14FZ 私 13PI.0F3.0iTWDPl.1F3.1iTXDPl JFaiNTOP-1.3PaTNTIFI.4FM AfTOPI.5P3.G/T1pi.npa.c.WRPlP3 7.RDR3TLCD1LMD'OLSfl 裙 rs m v匚kJ* 咧A-4.系统控制程序的设计要求包括内容:控制程序的工作流程图,控制程序的源代码,及其控制程序的重点说明。#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar keycode,DDram_value=0xc0;sbit RS=P2A0;sbit RW=P2A1;sbit E =P2A2;sbit speaker=P2A3;uchar code table=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20;uchar code table_designer="JIANG SHAO YONG”;void lcd_delay();void delay(uint n);void lcd_init(void);void lcd_busy(void);void lcd_wr_con(uchar c);void lcd wr data(uchar d);uchar checkkey(void);uchar keyscan(void);void main()uchar num;lcd_init();lcd_wr_con(0x80);for(num=0;num<=14;num+)lcd_wr_data(table_designernum);while(1)keycode=keyscan();if(keycode>=0)&&(keycode<=9)lcd_wr_con(0x06);lcd_wr_con(DDram_value);lcd_wr_data(tablekeycode);DDram_value+;else if(keycode=0x0a)lcd_wr_con(0x04);DDram_value-;if(DDram_value<=0xc0)DDram_value=0xc0;else if(DDram_value>=0xcf)DDram_value=0xcf;lcd_wr_con(DDram_value);lcd_wr_data(table10);else if(keycode=0x0b)uchar i,j;j=0xc0;for(i=0;i<=15;i+)lcd_wr_con(j);lcd wr data(table10);j+;DDram_value=0xc0;/液晶工作时的延时函数void lcd_delay()uchar y;for(y=0;y<0xff;y+)/液晶初始化void lcd_init(void)lcd_wr_con(0x01);lcd_wr_con(0x38);lcd_wr_con(0x0c);lcd_wr_con(0x06);/判断液晶忙或闲的程序void lcd_busy(void)P0=0xff;RS=0;RW=1;E=1;E=0;while(P0&0x80)E=0;E=1;lcd_delay();向液晶控制口输入命令的调用函数void lcd_wr_con(uchar c)lcd_busy();E=0;RS=0;RW=0;E=1;P0=c;E=0;lcd_delay();向液晶写数据的调用函数void lcd_wr_data(uchar d)lcd_busy();IE=0;RS=1;RW=0;E=1;P0=d;E=0;lcd_delay();void delay(uint n)uchar i;uint j;for(i=50;i>0;i-)for(j=n;j>0;j-);检测键有无按下函数uchar checkkey(void)uchar temp;P1=0xf0;temp=P1;temp=temp&0xf0;if(temp=0xf0)return(0);elsereturn(1);/键盘扫描函数,返回所按下的键盘号uchar keyscan(void)uchar hanghao,liehao,keyvalue,buff;if(checkkey()=0)return(0xff);/无键按下,返回 0xffelseuchar sound;for(sound=50;sound>0;sound-)speaker=0;delay(1);speaker=1;delay(1);P1=0x0f;buff=P1;if(buff=0x0e)hanghao=0;else if(buff=0x0d)hanghao=3;else if(buff=0x0b)hanghao=6;else if(buff=0x07)hanghao=9;P1=0xf0;buff=P1;if(buff=0xe0)liehao=2;else if(buff=0xd0)liehao=1;else if(buff=0xb0)liehao=0;keyvalue=hanghao+liehao;while(P1!=0xf0);return(keyvalue);5,系统的调试和结果要求包括内容:系统调试的方法,系统正确运行的照片或图用必须包括整个工作过程的图 片LCD1LMO .町JIANQ SHfiO VDNG 15972993977TfI -II:' L' - . " 37 FOE如 PO1RF1kXTALIFO C-'AEC-RO ! 'ADIP0.2:AD2HTALZPOJlAEbP0.4 涓 DiP0.&心的gC6FSTPO TD?F2 Q'AE-F2.F7WPZZ.A1OPS网P2.3.ATI*0_EP2.W 世EAP2.S'A13P2.anAUP2.7.'A1ipi.nP3.awoPl.TFS.1 TXDPvaP3.2'NT6P1.3PS.a-TNTIPl.735 RM E3B FOG 5一.,& *5V2lRS -33E检查电路是否正确连接,向单片机烧录hex文件,检查反复调试。6.实验过程中所遇到的问题,解决方法和建议在实验过程中,编的程序出现了很多问题,除了字符错误,还出现了逻辑错误以及过定义。 将程序分块可以解决很多错误;增加注释,提高程序的可读性,