数码管显示AD转换的电压值数码管显示秒表

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

电子科技大学微电子与固体电子学院实验报告

实验名称现代电子技术综合实验

姓名:詹朋璇

学号:2011031030024

评分:

教师签字

电子科技大学教务处制

电子科技大学

实验报告

学生姓名:詹朋璇学号:2011031030024 指导教师:熊万安

实验地点:211大楼308 实验时间:2014. 6.30 晚

一、实验室名称:单片机技术综合实验室

二、

实验项目名称:数码管显示A/D转换的电压值&数码管显示秒表

三、实验学时:12

四、实验目的与任务:

1、熟悉系统设计与实现原理

2、掌握KEIL C51的基本使用方法

3、熟悉实验板的应用

4、连接电路,编程调试,实现各部分的功能

5、完成系统软件的编写与调试

五、实验器材

1、PC机一台

2、实验板一块

六、实验原理、步骤及内容

试验要求:数码管的第1位显示任务号1,第3位到第5位显示、

A/D转换的电压值,可调节电压,第7、8位显示两位学号;数码管第2位和第6位显示“-”号;

按按键key1进行切换,此时数码管第1位显示任务号2,第7、8位显示循环倒计时的秒表,范围为08秒到01秒后,再过01秒,秒表又显示为08秒;(单片机系统中利用定时器/计数器计数秒表的值:利用定时器T0延时1秒进行计数。),其它位显示不变,按按键key2时,秒表停止计数,再按按键key2时,秒表继续计数,按key1键,又回到任务1的显示状态。

当电压值大于2伏时,按按键不起作用。

1、硬件设计(可打印)

2、各部分硬件原理(可打印)

数码管动态扫描

TLS549ADC工作时序图3、软件设计

思考题:按键改用外部中断模式,电路如何修改(画示意图)?程序如何修改,写出中断服务程序。

答:将KEY1与KEY2键通过跳线分别接到INT0与INT1接口上。

开启中断:

SysInit()

{ …

EA=0; //禁止总中断

EX1=1; //使能/INT1 中断

EX0=1; //使能/INT0 中断

EA=1; }//使能总中断

中断服务程序:

void INT0SVC () interrupt 0

{

if(cnt<=31) cnt++;}

void INT1SVC () interrupt 2

{

if(cnt>=17) cnt--;}

七、总结及心得体会

1.利用单片机开发板上丰富的资源可以实现一个有一定功能的

系统。

2.懂得利用中断可以使单片机的效率提高。

八、对本实验过程及方法、手段的改进建议

实在是没有,都挺好的。

九、附录

1、程序

/*

利用TLC549 A/D转换器实现电压测量与显示

*/

#include //包含8051的SFR寄存器定义头文件

#include //扩展并行接口所需的绝对地址访问库函数

#define LED_dig XBYTE[0x9000] //8位数码管显示器的位选输出控制

#define LED_seg XBYTE[0x8000] //8位数码管显示器的段码(字形码)输出控制

#define KEY_IN XBYTE[0x8000]

//定义TLC549操作接口

sbit ADC_CS = P1^7;

sbit ADC_DA TA = P1^6;

sbit ADC_CLK = P1^5;

code unsigned char disp_seg[]= //显示段码

{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x 71,0x40,0x00,0xff};

// 0 1 2 3 4 5 6 7 8 9 a b c

d e f - blank,全亮

unsigned char DispBuf[8]; //定义显示缓冲区(由定时中断程序自动扫描)

unsigned char key_value,flag;//定义键盘返回值,任务标志

unsigned char y1000,y100,y10,y;//定义秒表的个位,十分位,百分位,千分位

unsigned short mbiao;//定义秒表计数单元

void delay(int ms); //延时大约1ms

unsigned char ReadAdc(void);//读取A/D转换结果

void AdcInit(void); //初始化ADC接口

void key_scan(void);

void main()

{

unsigned char i=0;

unsigned char volt, x100, x10, x;

TMOD &= 0x0f;

TMOD |= 0x10;

TH1 = 0xFC;

TL1 = 0x66;

TR1 = 1;

ET1 = 1;

TMOD &= 0xf0;

TMOD |= 0x01;

TH0 = 0xFC;

TL0 = 0x66;

TR0 = 1;

ET0 = 1;

EA =1;

AdcInit();

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

DispBuf[i] = 17; //全部8位显示灭

y1000=9;

y100=9;

y10=9;

y=9;

mbiao=9999;

flag=0;

while(1)

{

while(flag ==0)

{

volt = ReadAdc(); //得到A/D转换结果的数字量(0x00~0xff)

volt = volt * 250/256; //转换成电压值,其中Vr=2.5V

x100 = volt/100;

x10 = (volt - x100*100)/10;

x = (volt - x100*100)%10;

相关文档
最新文档