嵌入式实验报告(2)

2019-04-09 08:49

四、定时器0控制数码管一亮一灭 实验内容:

0.5定时时间一到,数码管闪烁一次;

实验电路图:

源程序:

#include \#include \

#define LED (1 << 7) /* P0.7引脚控制LED,低电平点亮 */ /* 函数名称:main()

* 函数功能:通过查询定时器0中断标志位控制LED点亮*/ int main(void)

{ PINSEL1 = 0x00000000; // 设置管脚连接GPIO IO0DIR = LED; // 设置LED控制口输出 T0TC = 0; // 定时器0初始化 T0PR = 99; // 设置定时器0分频为100分频,得120000Hz T0MCR = 0x03; // 匹配通道0匹配中断并复位T0TC T0MR0 = 60024; // 比较值(0.5s定时值) T0TCR = 0x03; // 启动并复位T0TC T0TCR = 0x01; while (1) { while ((T0IR & 0x01) == 0); // 等待定时时间到 T0IR = 0x01; // 清除中断标志 if ((IO0SET & LED) == 0) // 取反LED状态 IO0SET = LED; else IO0CLR = LED; } }

五、数码管动态显示 实验电路图:

源程序:

#include\void delay(uint32 x) { uint8 i; while(x--) for(i=500000;i>0;i--); }

uint8 table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };

uint8 table1[]={ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };

int main(void) { uint8 i,j,p=16; PINSEL0=0x00000000; PINSEL1=0x00000000; IO0DIR=0x00ffff00; while(1) { for(i=0;i<8;i++) { IO0CLR=IO0CLR|0xff00; IO0SET=~table[i]<<8;

for(j=0;j<8;j++) {

IO0CLR=IO0CLR|0xff0000; IO0SET=1<

六、将读取的DS18B20温度值转换为十进制 实验电路图:

#include \ #include \

uint8

}

/************************************

Tp[12]; *************************************

*** // 温度显示数据

uint16 tt; * 函数名称:ConvertTemperature() uint8 TMark = 0; * 函数功能: 将读取的 DS18B20 温度值转换// 温度正负标志 为十进制数 * 入口参数:tvalue 读取的DS18B20当前温/************************************度值 ***************************************************************************** *************************************

**/ * 函数名称:Init()

void ConvertTemperature(uint16 tvalue){ * 函数功能:I/O端口初始化,设置引脚连

Tp[1] = tvalue/1000+0x30; 接模块

************************************* // 百位数 ************************************* Tp[2] = tvalue00/100+0x30; **/ // 十位数 void Init(void){ Tp[3] = tvalue0/10+0x30; PINSEL0 |= 0x00000000; // 设置引脚连// 个位数

Tp[4] = 0x2E; 接模块

PINSEL1 |= 0x00000088; // 显示小数点 PINSEL2 &= 0x00000004; Tp[5] = tvalue+0x30;

for (i=0; i<50000; i++); // 显示温度小数位

Tp[6] = 0x01; }

// 显示自定义字符,用于温度符号显示

Tp[7]= 0x43; /************************************

*************************************// 显示字符\

Tp[8]= 0x20; *** // 显示字符\ * 函数名称:main() Tp[9]= 0x20; * 函数功能:主函数

// 显示字符\

Tp[10]= 0x20; // 显示字符\

Tp[11]= 0x20; // 显示字符\

if (TMark == 0){ Tp[0] = 0x20; // 正温度不显示符号

} else{ Tp[0] = 0x2D; // 负温度显示负号:- } if (Tp[1] == 0x30){ Tp[1] = 0x20; // 如果百位为0,不显示

if (Tp[2] == 0x30){ Tp[2] = 0x20; // 如果十位为0,不显示

} } } /**************************************************************************** * 函数名称:DelayNS()

* 函数功能:软件延时

* 入口参数:dly 延时参数,值越大,延时

越久

****************************************************************************/ void DelayNS(uint32 dly){ uint32 i; for ( ; dly>0; dly--)

************************************* *************************************

**/ int main(void){

uint8 i; Init(); // I/O 端口初始化

lcd_init(); // LCD初始化 DisText(0x80,\ for(i=0;i<110;i++)ReadTemp(); // 预读DS18B20 while (1){ ConvertTemperature(ReadTemp()); // 温度转换

DisText(0xc4,Tp); // 显示当前温度 }

}

七、LCD 1602显示1 实验电路图:

源程序:

#include \#define rs (1<<5) #define rw (1<<6) #define en (1<<7) #define busy (1<<15)

/****************************************************************************

* 函数名称:ChkBusy()

* 函数功能:检查总线是否忙

****************************************************************************/

void ChkBusy() { IO0DIR=0xf0; while(1) { IO0CLR=rs; IO0SET=rw; IO0SET=en;

if(!(IO0PIN & busy))break;

IO0CLR=en; } IO0DIR=0xffffffff; }

/****************************************************************************

* 函数名称:WrOp() * 函数功能:写命令

* 入口参数:dat,待写入LCD的命令 ****************************************************************************/

void WrOp(uint8 dat) { ChkBusy(); IO0CLR=rs; IO0CLR=rw; IO0CLR=IO0CLR|0xff00; //先清零 IO0SET=dat<<8; //再送数


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

下一篇:大气污染控制工程试题库(2013)

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

马上注册会员

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