电话拨码与显示实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.软件部分 C 语言程序
Key.c #include "key.h" #define DELAY_MS 20
extern void delay(unsigned int n);
unsigned char kbscan(void) {
unsigned char row,col; P3=0xf0; if((P3&0xF0)!=0xF0) {
row=(row<<1)|0x01; } } } return(0x00); }
第2页
常熟理工学院课程设计报告
unsigned char key_convert(unsigned char key1) {
unsigned char key2; switch(key1) {
case 0x11:key2=0x3f; break; case 0x21:key2=0x06; break; case 0x41:key2=0x5b; break; case 0x81:key2=0x4f; break; case 0x12:key2=0x66; break; case 0x22:key2=0x6d; break; case 0x42:key2=0x7d; break; case 0x82:key2=0x07; break; case 0x14:key2=0x7f; break; case 0x24:key2=0x6f; break; case 0x44:key2=0x58; break; case 0x84:key2=0x4c; break; case 0x18:key2=0x62; break; case 0x28:key2=0x69; break; case 0x48:key2=0x78; break; case 0x88:key2=0x78; break; default:key2=0x00; break; } return(key2); } Led.c #include "led.h" unsigned char LED_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};//共阴段码 unsigned char LED_bit[6]={0x01,0x02,0x04,0x08,0x10,0x20}; unsigned char LED_buf[6]={0}; unsigned char convert(unsigned long int n,unsigned char a[]) //取各位函数 { unsigned char i; i=0; while(n) { a[i]=(unsigned char)(n%10); n=n/10; i++; } return(i); }
器件清单
编号
1 2 3 4 5 6
仪器设备 WD990 微机电源 8051 最小系统板 键盘显示接口板 万用表 示波器 Proteus7.8 sp2 仿真软 件
数量
1 1 1 1 1 1
实验流程操作图
单位 个 套 块 套 台 份
图一实验操作流程图
第1页
常熟理工学院课程设计报告
实验内容
1、采用 4*4 键盘与 6 位共阴(CC:Common Cathode)数码管模拟一电话拨号与显示; (1)基本功能 没有按键时,数码管不显示; 按下 1 键,最低位显示,按住还是显示 1; 松开后再按下 2,低两位显示 12(要求有移位功能); 依次类推实现 6 位拨号功能。 (2)扩展功能 增加退格与修改等功能。
unsigned int i; for(i=0;i<n;i++)
; } void main(void) {
unsigned char LED_bit[6]={0x01,0x02,0x04,0x08,0x10,0x20}; unsigned char LED_seg[10]; unsigned char key1,key2; unsigned char i=0; unsigned char n=0; unsigned char pre_key2=0; while(1) {
单片机实验报告
课程名称
实验名称 专业 班级 学号 姓名
实验地点 实验日期
单片机技术与应用
电话拨码与显示实验 光电信息工程 光电 121 班 050312113 蒯玄
躬行楼 528 2015. 4 .23
常熟理工学院课程设计报告
8051 电话拨号与显示实验
实验目的
1、掌握4*4 键盘扫描原理与编程; 2、掌握数码管动态显示原理与编程; 3、掌握Proteus78 单片机仿真软件的使用; 4、掌握Keil uVision 环境下工程项目设计方法与文件管理; 5、熟悉键盘扫描与数码显示实验板的使用与功能验证。
delay(DELAY_MS); if((P3&0xF0)!=0Байду номын сангаасF0) {
row=0xFE; while((row&0x10)!=0) {
P3=row; if((P3&0xF0)!=0xF0) {
col=(P3&0xF0)|0x0F; return ((~row)|(~col));
//return(~P3); } else
第3页
常熟理工学院课程设计报告
Main.c #include "reg51.h" #include "key.h" #include "led.h" extern unsigned char kbscan(void); extern unsigned char key_convert(unsigned char key1); extern unsigned char LED_buf[6]; void delay(unsigned int n) {
本次实验需要每个人都要编写程序,在实验开始前期,通过在图书馆查找相关书籍, 向懂得的人请教,但是代码的功能却不完整,达到了最基本的显示功能。在软件没有错误 的情况下,我们小组领取好实验器材,搭建好电路板,为了接下来更顺利的进行,先测试 软件,用一个功能不完善的的软件进行下载,一开始程序不能运行。通过查找电路板及单 片机找到原因,发现端口接反,修改后才使得程序能运行。然而显示会出现乱码,最后发 现是因为在仿真图中的数码管显示的位码端是低电平有效,而实际电路中是高电平有效, 最后在程序中将其修改才得以实现功能。
第6页
常熟理工学院课程设计报告
实验指导书才能使用该软件。一开始编译好按键的程序,就准备进行仿真测试,可是在将 程序下载到单片机里的时候出现了问题,找不到文件下载,最后才发现自己并没有将那个.C 文件生成 hex 文件,所以不能进行仿真。最后编译的时候出现目标没有创建成功的错误, 只好请教做好的同学,在他的帮助下才勉强完成。
第4页
pre_key2=key2; } } 2. 硬件部分 实验原理图
常熟理工学院课程设计报告
3.调试部分
图二电话拨码与显示原理图
调试先在 Keil uVision4 软件环境下进行程序编写,利用工程思想,将代码模块化, 分为主程序,按键程序和 led 显示程序三个部分,每个部分再有相对应的头文件。程序编 写完成后再生成 hex 文件在 proteus7.8 的仿真图中进行模拟仿真,有问题时,再回到 Keil uVision4 中对程序进行修改。当在 proteus 中仿真成功以后,再将程序烧写到开发板上, 进行实物调试。
第7页
key1=kbscan(); key2=key_convert(key1); if(key2) {
if(pre_key2==0x00) {
if(n==6) n=0;
LED_seg[n]=key2; n++; } } if(n) { P0=LED_bit[i]; P2=LED_seg[n-i-1]; delay(200) ; i++; if(i==n) i=0; }
经过第一次实验的训练,本来以为第二次实验应该比第一次实验做起来顺利一点,可 是结果貌似并不是我想的那样。这次实验不像第一次实验那样要去连接面包板,反之,这 次实验的关键在于程序的编写。这次实验时每个人独立编写程序,最后下载到单片机里去 实现功能测试。本次实验主要分为三个模块,第一个就是要实现按键的仿真测试,第二部 分就是数码管的显示,第三部分就是这两部分的结合。但是软件并没有了解透彻,要根据
第5页
实验实物图
常熟理工学院课程设计报告
图 3(a) 接通电源时
图 3(b)按键输入数字
图 3(c)按键输入 2014
图 3(d)退格功能实现 图 3 实物图
实验小结
通过本次实验,我掌握了 4*4 键盘扫描原理与编程和数码管动态显示原理与编程, 并完成了模拟的电话拨号系统。同时学习了工程文件编写的一些规范,比如头文件要和源 文件分开写,在头文件中写头文件,函数的声明,宏的定义,端口的定义还有变量的定义。 头文件的编写规范,固定格式,如果没有定义再定义以防止重复定义,数组之类的定义和 变量的初始化要放在源文件里。再者,将各个模块分开来写,有利于大家合作共同完成一 个工程,并且还可以将写好的源文件用于其他工程文件之中。
Key.c #include "key.h" #define DELAY_MS 20
extern void delay(unsigned int n);
unsigned char kbscan(void) {
unsigned char row,col; P3=0xf0; if((P3&0xF0)!=0xF0) {
row=(row<<1)|0x01; } } } return(0x00); }
第2页
常熟理工学院课程设计报告
unsigned char key_convert(unsigned char key1) {
unsigned char key2; switch(key1) {
case 0x11:key2=0x3f; break; case 0x21:key2=0x06; break; case 0x41:key2=0x5b; break; case 0x81:key2=0x4f; break; case 0x12:key2=0x66; break; case 0x22:key2=0x6d; break; case 0x42:key2=0x7d; break; case 0x82:key2=0x07; break; case 0x14:key2=0x7f; break; case 0x24:key2=0x6f; break; case 0x44:key2=0x58; break; case 0x84:key2=0x4c; break; case 0x18:key2=0x62; break; case 0x28:key2=0x69; break; case 0x48:key2=0x78; break; case 0x88:key2=0x78; break; default:key2=0x00; break; } return(key2); } Led.c #include "led.h" unsigned char LED_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};//共阴段码 unsigned char LED_bit[6]={0x01,0x02,0x04,0x08,0x10,0x20}; unsigned char LED_buf[6]={0}; unsigned char convert(unsigned long int n,unsigned char a[]) //取各位函数 { unsigned char i; i=0; while(n) { a[i]=(unsigned char)(n%10); n=n/10; i++; } return(i); }
器件清单
编号
1 2 3 4 5 6
仪器设备 WD990 微机电源 8051 最小系统板 键盘显示接口板 万用表 示波器 Proteus7.8 sp2 仿真软 件
数量
1 1 1 1 1 1
实验流程操作图
单位 个 套 块 套 台 份
图一实验操作流程图
第1页
常熟理工学院课程设计报告
实验内容
1、采用 4*4 键盘与 6 位共阴(CC:Common Cathode)数码管模拟一电话拨号与显示; (1)基本功能 没有按键时,数码管不显示; 按下 1 键,最低位显示,按住还是显示 1; 松开后再按下 2,低两位显示 12(要求有移位功能); 依次类推实现 6 位拨号功能。 (2)扩展功能 增加退格与修改等功能。
unsigned int i; for(i=0;i<n;i++)
; } void main(void) {
unsigned char LED_bit[6]={0x01,0x02,0x04,0x08,0x10,0x20}; unsigned char LED_seg[10]; unsigned char key1,key2; unsigned char i=0; unsigned char n=0; unsigned char pre_key2=0; while(1) {
单片机实验报告
课程名称
实验名称 专业 班级 学号 姓名
实验地点 实验日期
单片机技术与应用
电话拨码与显示实验 光电信息工程 光电 121 班 050312113 蒯玄
躬行楼 528 2015. 4 .23
常熟理工学院课程设计报告
8051 电话拨号与显示实验
实验目的
1、掌握4*4 键盘扫描原理与编程; 2、掌握数码管动态显示原理与编程; 3、掌握Proteus78 单片机仿真软件的使用; 4、掌握Keil uVision 环境下工程项目设计方法与文件管理; 5、熟悉键盘扫描与数码显示实验板的使用与功能验证。
delay(DELAY_MS); if((P3&0xF0)!=0Байду номын сангаасF0) {
row=0xFE; while((row&0x10)!=0) {
P3=row; if((P3&0xF0)!=0xF0) {
col=(P3&0xF0)|0x0F; return ((~row)|(~col));
//return(~P3); } else
第3页
常熟理工学院课程设计报告
Main.c #include "reg51.h" #include "key.h" #include "led.h" extern unsigned char kbscan(void); extern unsigned char key_convert(unsigned char key1); extern unsigned char LED_buf[6]; void delay(unsigned int n) {
本次实验需要每个人都要编写程序,在实验开始前期,通过在图书馆查找相关书籍, 向懂得的人请教,但是代码的功能却不完整,达到了最基本的显示功能。在软件没有错误 的情况下,我们小组领取好实验器材,搭建好电路板,为了接下来更顺利的进行,先测试 软件,用一个功能不完善的的软件进行下载,一开始程序不能运行。通过查找电路板及单 片机找到原因,发现端口接反,修改后才使得程序能运行。然而显示会出现乱码,最后发 现是因为在仿真图中的数码管显示的位码端是低电平有效,而实际电路中是高电平有效, 最后在程序中将其修改才得以实现功能。
第6页
常熟理工学院课程设计报告
实验指导书才能使用该软件。一开始编译好按键的程序,就准备进行仿真测试,可是在将 程序下载到单片机里的时候出现了问题,找不到文件下载,最后才发现自己并没有将那个.C 文件生成 hex 文件,所以不能进行仿真。最后编译的时候出现目标没有创建成功的错误, 只好请教做好的同学,在他的帮助下才勉强完成。
第4页
pre_key2=key2; } } 2. 硬件部分 实验原理图
常熟理工学院课程设计报告
3.调试部分
图二电话拨码与显示原理图
调试先在 Keil uVision4 软件环境下进行程序编写,利用工程思想,将代码模块化, 分为主程序,按键程序和 led 显示程序三个部分,每个部分再有相对应的头文件。程序编 写完成后再生成 hex 文件在 proteus7.8 的仿真图中进行模拟仿真,有问题时,再回到 Keil uVision4 中对程序进行修改。当在 proteus 中仿真成功以后,再将程序烧写到开发板上, 进行实物调试。
第7页
key1=kbscan(); key2=key_convert(key1); if(key2) {
if(pre_key2==0x00) {
if(n==6) n=0;
LED_seg[n]=key2; n++; } } if(n) { P0=LED_bit[i]; P2=LED_seg[n-i-1]; delay(200) ; i++; if(i==n) i=0; }
经过第一次实验的训练,本来以为第二次实验应该比第一次实验做起来顺利一点,可 是结果貌似并不是我想的那样。这次实验不像第一次实验那样要去连接面包板,反之,这 次实验的关键在于程序的编写。这次实验时每个人独立编写程序,最后下载到单片机里去 实现功能测试。本次实验主要分为三个模块,第一个就是要实现按键的仿真测试,第二部 分就是数码管的显示,第三部分就是这两部分的结合。但是软件并没有了解透彻,要根据
第5页
实验实物图
常熟理工学院课程设计报告
图 3(a) 接通电源时
图 3(b)按键输入数字
图 3(c)按键输入 2014
图 3(d)退格功能实现 图 3 实物图
实验小结
通过本次实验,我掌握了 4*4 键盘扫描原理与编程和数码管动态显示原理与编程, 并完成了模拟的电话拨号系统。同时学习了工程文件编写的一些规范,比如头文件要和源 文件分开写,在头文件中写头文件,函数的声明,宏的定义,端口的定义还有变量的定义。 头文件的编写规范,固定格式,如果没有定义再定义以防止重复定义,数组之类的定义和 变量的初始化要放在源文件里。再者,将各个模块分开来写,有利于大家合作共同完成一 个工程,并且还可以将写好的源文件用于其他工程文件之中。