实验报告1.0

2019-03-15 22:39

实验一 数码管实验

一、实验目的

掌握数码管的使用,了解数码管扫描的原理。

二、实验内容

1、实验原理

开发板设计了一个四位八段共阴极数码管。P0~P7分别连接数码管的阳极,K0~K3分别连接四位的控制端。由于四位数码管公用相同的阳极,要实现数码管每一位显示不同的数字,则必须通过扫描的方式来实现,也就是说某个时刻只有一个数码管处于点亮状态,由于人眼的视觉暂留,看到的效果是是四位数码管都是同时点亮的。

扫描的具体方法是:P口输出第一位数码的段码,K口控制第一位导通其它三位不导通,延时5ms后,P口输出第二位数码管的段码,K口控制第二位导通其它三位不导通,如此直到扫描完第四位后,继续扫描第一位。

2、实验步骤

(1)用跳线帽将JP2的(QH~P7)、(QG~P6)、(QF~P5)、(QD~P3)、(QC~P2)、(QB~P1)、(QA~P0)插针短接,将BDM下载器连接到开发板上,打开开发板电源。

(2)打开光盘文件中的“演示代码\\数码管扫描\\BBIT_LED2.mcp”。 (3)点击(Debug)按钮,将源代码下载到单片机中,进入调试窗口。 (4)点击调试窗口的(Start)按钮,程序开始执行。

(5)观察实验现象,数码管显示“0000”延时一会之后,显示“1111”直到显示“9999”。延时一会儿之后显示“0.0.0.0.”,延时显示“1.1.1.1.”直至“9.9.9.9.”,如此循环。

三、实验原理图

四、实验所用源程序(下划线部分为改动部分)

#include /* common defines and macros */ #include \ /* derivative-specific definitions */ #define CONT1 PORTK_PK3 #define CONT2 PORTK_PK2 #define CONT3 PORTK_PK1 #define CONT4 PORTK_PK0

#define CONT1_dir DDRK_DDRK3 #define CONT2_dir DDRK_DDRK2 #define CONT3_dir DDRK_DDRK1 #define CONT4_dir DDRK_DDRK0 #define DATA PTP

#define DATA_dir DDRP #define LEDCPU PORTK_PK4

#define LEDCPU_dir DDRK_DDRK4 #define BUS_CLOCK 32000000 //总线频率 #define OSC_CLOCK 16000000 //晶振频率

byte shuma[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //0~9对应的段码

0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //0~9后加小数点对应的段码 unsigned int i;

/*************************************************************/ /* 初始化锁相环 */ /*************************************************************/ void INIT_PLL(void) {

CLKSEL &= 0x7f; //set OSCCLK as sysclk PLLCTL &= 0x8F; //Disable PLL circuit CRGINT &= 0xDF;

#if(BUS_CLOCK == 40000000) SYNR = 0x44;

#elif(BUS_CLOCK == 32000000) SYNR = 0x43;

#elif(BUS_CLOCK == 24000000) SYNR = 0x42; #endif

REFDV = 0x81; //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M PLLCTL =PLLCTL|0x70; //Enable PLL circuit

asm NOP; asm NOP;

while(!(CRGFLG&0x08)); //PLLCLK is Locked already CLKSEL |= 0x80; //set PLLCLK as sysclk }

/*************************************************************/ /* 初始化端口 */ /*************************************************************/ void INIT_port(void) {

CONT1_dir = 1; CONT2_dir = 1; CONT3_dir = 1; CONT4_dir = 1; CONT1 = 0; CONT2 = 0; CONT3 = 0; CONT4 = 0; DATA_dir = 0xff; DATA = 0x00; }

/*************************************************************/ /* 延时函数 */ /*************************************************************/ void delay(void) {

unsigned int i,j; for(j=0;j<100;j++) for(i=0;i<60000;i++); }

/*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) { DisableInterrupts; INIT_PLL(); INIT_port(); LEDCPU_dir=1; LEDCPU=0;

EnableInterrupts;

CONT1=1; //使能数码管的第一位 for(;;) {

for(i=0;i<10;i++) {

DATA = shuma[10-i]; //循环显示数字 delay(); } } }

五、实验流程图

开始 初始化端口 选位端口 计数变量i初始化 i<10? 输出table表中10-i无素 变量增益1 延时

六、总结

1) 了解了实验芯片的基本构造,实验板的电路。 2) 学习了锁相环的倍频功能和实现方式

3) 对于数码管显示的基本硬件原理作掌握并应用,将循环显示,改写为倒计时表

实验二 ATD实验

一、 实验目的

掌握XS128单片机模数转换(ATD)模块的使用。

二、 实验内容

1、在调试窗口的DATA:1窗口中显示了AD_in0和AD_in1两个AD输入通道的值,单击

AD_in0和AD_in1可以显示电压的实时值。

2、用螺丝刀转动滑动变阻器R45和R48,并单击AD_in0和AD_in1,则值会发生变化。

3、用万用表测量电路板上的测试点AD0和AD1的电压值并与AD_in0和AD_in1的值进行对比。数值与电压的对应关系为: ATDDR=(255*U)/5

其中U为测量的电压值,ATDDR为AD转换的数值。

三、 实验原理图


实验报告1.0.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:毕业论文-唐良梅(定稿)2012.11.25

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: