数码管显示AD转换的电压值数码管显示秒表.docx
- 文档编号:7779222
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:11
- 大小:69KB
数码管显示AD转换的电压值数码管显示秒表.docx
《数码管显示AD转换的电压值数码管显示秒表.docx》由会员分享,可在线阅读,更多相关《数码管显示AD转换的电压值数码管显示秒表.docx(11页珍藏版)》请在冰豆网上搜索。
数码管显示AD转换的电压值数码管显示秒表
电子科技大学微电子与固体电子学院
实验报告
实验名称现代电子技术综合实验
姓名:
詹朋璇
学号:
评分:
教师签字
电子科技大学教务处制
电子科技大学
实验报告
学生姓名:
詹朋璇学号:
指导教师:
熊万安
实验地点:
211大楼308实验时间:
2014.晚
一、实验室名称:
单片机技术综合实验室
实验项目名称:
数码管显示A/D转换的电压值&数码管显示秒表
二、实验学时:
12
三、实验目的与任务:
1、熟悉系统设计与实现原理
2、掌握KEILC51的基本使用方法
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、软件设计
2按下
1按下
1按下1按下2按下
思考题:
按键改用外部中断模式,电路如何修改(画示意图)程序如何修改,写出中断服务程序。
答:
将KEY1与KEY2键通过跳线分别接到INT0与INT1接口上。
开启中断:
SysInit()
{…
EA=0;用单片机开发板上丰富的资源可以实现一个有一定功能的系统。
2.懂得利用中断可以使单片机的效率提高。
六、对本实验过程及方法、手段的改进建议
实在是没有,都挺好的。
七、附录
1、程序
/*
利用TLC549A/D转换器实现电压测量与显示
*/
#include<>//包含8051的SFR寄存器定义头文件
#include<>//扩展并行接口所需的绝对地址访问库函数
#defineLED_digXBYTE[0x9000]//8位数码管显示器的位选输出控制
#defineLED_segXBYTE[0x8000]//8位数码管显示器的段码(字形码)输出控制
#defineKEY_INXBYTE[0x8000]
//定义TLC549操作接口
sbitADC_CS=P1^7;
sbitADC_DATA=P1^6;
sbitADC_CLK=P1^5;
codeunsignedchardisp_seg[]=//显示段码
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x71,0x40,0x00,0xff};
//0123456789abcdef-blank,全亮
unsignedcharDispBuf[8];//定义显示缓冲区(由定时中断程序自动扫描)
unsignedcharkey_value,flag;//定义键盘返回值,任务标志
unsignedchary1000,y100,y10,y;//定义秒表的个位,十分位,百分位,千分位
unsignedshortmbiao;//定义秒表计数单元
voiddelay(intms);//延时大约1ms
unsignedcharReadAdc(void);//读取A/D转换结果
voidAdcInit(void);//初始化ADC接口
voidkey_scan(void);
voidmain()
{
unsignedchari=0;
unsignedcharvolt,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=
x100=volt/100;
x10=(volt-x100*100)/10;
x=(volt-x100*100)%10;
DispBuf[0]=4;
DispBuf[1]=2;
DispBuf[2]=16;
DispBuf[3]=x;
DispBuf[4]=x10;
DispBuf[5]=x100;
DispBuf[6]=16;
DispBuf[7]=1;
delay(100);
if(key_value==8&&volt<=200){flag=1;mbiao=9000;while(key_value==8);}
}
while(flag==1)
{
TR0=1;
volt=ReadAdc();
volt=volt*250/256;//转换成电压值,其中Vr=
x100=volt/100;
x10=(volt-x100*100)/10;
x=(volt-x100*100)%10;
DispBuf[0]=y1000;
DispBuf[1]=0;
DispBuf[2]=16;
DispBuf[3]=x;
DispBuf[4]=x10;
DispBuf[5]=x100;
DispBuf[6]=16;
DispBuf[7]=2;
if(key_value==8&&volt<=200){flag=0;while(key_value==8);}
elseif(key_value==7&&volt<=200){flag=2;while(key_value==7);}
}
while(flag==2)
{
TR0=!
TR0;
if(key_value==7){flag=1;while(key_value==7);}
}
}
}
/*
函数:
T1INTSVC()
功能:
定时器T1的中断服务函数
*/
voidT1INTSVC()interrupt3
{
codeunsignedcharcom[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
staticunsignedcharn=0;
TR1=0;
TH1=0xFC;
TL1=0x66;
TR1=1;
LED_dig=0xFF;//暂停显示
if(flag==0)
{
if(n==5)
LED_seg=~(disp_seg[DispBuf[n]]|0x80);
else
LED_seg=~disp_seg[DispBuf[n]];//更新扫描数据
}
if(flag==1)
{if(n==5)
LED_seg=~(disp_seg[DispBuf[n]]|0x80);
else
if(n==4)
LED_seg=~(disp_seg[DispBuf[n]]);//更新扫描数据,
else
LED_seg=~disp_seg[DispBuf[n]];//更新扫描数据
}
if(flag==2)
{
LED_seg=~disp_seg[DispBuf[n]];//更新扫描数据
}
LED_dig=~com[n];//重新显示
key_scan();
n++;
n&=0x07;
}
voiddelay(intms)
{
unsignedinti,j;
for(i=0;i { for(j=0;j<100;j++) ; } } /* 函数: ReadAdc() 功能: 读取A/D转换结果 返回: 8位ADC代码 */ unsignedcharReadAdc(void) { unsignedchard;//读取得ADC结果 unsignedcharn;//ADCbit位计数 ADC_CS=0; n=5; while(--n! =0);//模拟tsu时间 n=8; do { d<<=1; if(ADC_DATA) d=d|0x01;//或d++; ADC_CLK=1; ADC_CLK=0; }while(--n! =0); ADC_CS=1; returnd; } /* 函数: AdcInit() 功能: 初始化ADC接口 */ voidAdcInit(void) { ADC_CS=1; ADC_CLK=0; ADC_DATA=1; ReadAdc();//空读一次,用于启动一次A/D转换过程 } voidkey_scan(void) { unsignedcharkey_in; key_in=KEY_IN; switch(key_in) { case0xff: key_value=0; break; case~0x01: key_value=1; break; case~0x02: key_value=2; break; case~0x04: key_value=3; break; case~0x08: key_value=4; break; case~0x10: key_value=5; break; case~0x20: key_value=6; break; case~0x40: key_value=7; break; case~0x80: key_value=8; break; default: break; } } /* 函数: T1INTSVC() 功能: 定时器T0的中断服务函数 */ voidT0INTSVC()interrupt1 { TR0=0; TH0=0xFC; TL0=0x66; TR0=1; if(mbiao<=9000&&TR0==1)mbiao=mbiao-1; if(mbiao==0)mbiao=9000; y1000=mbiao/1000; y100=(mbiao-y1000*1000)/100; y10=(mbiao-y1000*1000-y100*100)/10; y=(mbiao-y1000*1000-y100*100)%10; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数码管 显示 AD 转换 电压 秒表