基于单片机的数字电压表设计毕业设计论文

发布时间 : 星期二 文章基于单片机的数字电压表设计毕业设计论文更新完毕开始阅读

攀枝花学院本科毕业设计(论文) 4 软件设计方案

4 软件设计

4.1 程序流程图

本设计的软件部分主要完成系统的初始化内部数据计算,数据线显示输出等

功能。如图4.1所示是其主程序流程图和中断服务程序流程图。

开始对液晶,定时器初始化A/D转换数据转换档位按键判断Y平均电压值显示五秒的N三秒后清屏显示瞬时的电压值 图4.1 程序流程图

在启动CS5460A之前,必须先对它复位,只要对他的复位脚发复位脉冲,脉宽不少于10ms即可。对CS5460A写OXE8控制命令,即开始进行AD转换,并输出计算结果,这个命令一般在复位操作完成后输入,使其进入正常工作状态。在校准前必须使CS5460A处于活动状态,同时准备接收有效命令,并清除状态寄存器的DRDY位。有事串口与SCK会不同步,这时可向串口发初始化序列,包括至少3个时钟周期的STNC1命令字0XFF,以及紧跟着一个时钟周期的SYNC0命令字0XFE,这样才能使CS5460A能够正确的解释输入的命令字。

CS5460A,每次复位时会将偏移寄存器清0和增益寄存器置1,将校准得到的偏移寄存器值、增益寄存器值保存在EEPROM,初始化时再将这些值重新装入对应的寄存器中。

21

攀枝花学院本科毕业设计(论文) 4 软件设计方案

4.2 子程序设计

4.2.1 CS5460A端口初始化程序

void InitPort(void) {

DDRB |= _BV(1)+_BV(3)+_BV(5); PORTB &= ~_BV(4); DDRB &= ~_BV(4); }

4.2.2 CS5460A SPI读写程序

void Write_CS5460A(u08 *ptr,u08 n) {

s08 i=0,j=0; SCLK_L(); EN_CS();

for(j=n;j>=1;j--) {

for(i=7;i>=0;i--) {

SCLK_L();

if( ((*ptr)&(1<

if(j==0) UN_CS(); }

void Read_CS5460A(u08 reg,u08 *ptr) {

22

攀枝花学院本科毕业设计(论文) 4 软件设计方案 s08 i,j; EN_CS(); *ptr=reg;

Write_CS5460A(ptr,1); ptr++; SDI_H();

for(i=3;i>0;i--) {

for(j=7;j>=0;j--) {

SCLK_L(); _delay_us(5); if(SDO == 1) *ptr |= (1<

*ptr &= ~(1<

void Clear_DRDY(void) {

buf[0]=0x5e; buf[1]=0xff; buf[2]=0xff; buf[3]=0xff;

23

攀枝花学院本科毕业设计(论文) 4 软件设计方案 Write_CS5460A(buf,4); }

void Wait_DRDY_High(void) {

while(1) {

Read_CS5460A(0x1e,buf);

if( (buf[1]&0x80) != 0 ) break; } }

4.2.3 CS5460A初始化程序

void Init5460(void) {

_delay_ms(5);

buf[0]=0xff; //SYNC1 buf[1]=0xff; //SYNC1 buf[2]=0xff; //SYNC1 buf[3]=0xfe; //SYNC0 Write_CS5460A(buf,4); buf[0]=0x40;

buf[1]=0x00; //GI=1 buf[2]=0x10;

buf[3]=0x61; //DCLK=MCLK/1,高通 Write_CS5460A(buf,4); //写配置寄存器 buf[0]=WRITE|0x20; buf[1]=0x3D; buf[2]=0xC2;

buf[3]=0x5C;

Write_CS5460A(buf,4); //电流 交流偏置 校准寄存器 buf[0]=WRITE|0x22; buf[1]=0x1F; buf[2]=0xBB;

buf[3]=0x65;

Write_CS5460A(buf,4); //电压 交流偏置 校准寄存器

24

联系合同范文客服:xxxxx#qq.com(#替换为@)