数码管显示AD转换的电压值数码管显示秒表精编版Word下载.docx
- 文档编号:19588386
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:13
- 大小:746.86KB
数码管显示AD转换的电压值数码管显示秒表精编版Word下载.docx
《数码管显示AD转换的电压值数码管显示秒表精编版Word下载.docx》由会员分享,可在线阅读,更多相关《数码管显示AD转换的电压值数码管显示秒表精编版Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
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;
//禁止总中断
EX1=1;
//使能/INT1中断
EX0=1;
//使能/INT0中断
EA=1;
}//使能总中断
中断服务程序:
voidINT0SVC()interrupt0
{
if(cnt<
=31)cnt++;
}
voidINT1SVC()interrupt2
if(cnt>
=17)cnt--;
七、总结及心得体会
1.利用单片机开发板上丰富的资源可以实现一个有一定功能的系统。
2.懂得利用中断可以使单片机的效率提高。
八、对本实验过程及方法、手段的改进建议
实在是没有,都挺好的。
九、附录
1、程序
/*
利用TLC549A/D转换器实现电压测量与显示
*/
#include<
reg51.h>
//包含8051的SFR寄存器定义头文件
absacc.h>
//扩展并行接口所需的绝对地址访问库函数
#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;
=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;
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=volt*250/256;
x100=volt/100;
x10=(volt-x100*100)/10;
x=(volt-x100*100)%10;
DispBuf[0]=y1000;
DispBuf[1]=0;
DispBuf[5]=x100;
DispBuf[6]=16;
DispBuf[7]=2;
if(key_value==8&
=200){flag=0;
}
elseif(key_value==7&
=200){flag=2;
while(key_value==7);
}
while(flag==2)
{
TR0=!
TR0;
if(key_value==7){flag=1;
}
}
函数:
T1INTSVC()
功能:
定时器T1的中断服务函数
voidT1INTSVC()interrupt3
codeunsignedcharcom[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
staticunsignedcharn=0;
TR1=0;
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)
if(n==4)
LED_seg=~(disp_seg[DispBuf[n]]);
//更新扫描数据,
else
//更新扫描数据
if(flag==2)
LED_dig=~com[n];
//重新显示
key_scan();
n++;
n&
=0x07;
voiddelay(intms)
unsignedinti,j;
ms;
i++)//延时大约1ms(fosc=11.0592MHz)
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!
ADC_CS=1;
returnd;
AdcInit()
初始化ADC接口
voidAdcInit(void)
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;
case~0x02:
key_value=2;
case~0x04:
key_value=3;
case~0x08:
key_value=4;
case~0x10:
key_value=5;
case~0x20:
key_value=6;
case~0x40:
key_value=7;
case~0x80:
key_value=8;
default:
定时器T0的中断服务函数
voidT0INTSVC()interrupt1
TR0=0;
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 转换 电压 秒表 精编