您的位置 首页 5G

EM78P458电压表的制造

以前的学习笔记——在学习74HC164的应用,用义隆单片机调试。用了汇编调试成功后又用C调试了下。练习着就打算用C语言来编写AD的读写,顺便…

曾经的学习笔记——在学习74HC164的使用,用义隆单片机调试。用了汇编调试成功后又用C调试了下。操练着就计划用C言语来编写AD的读写,趁便结合74HC164写了个电压表的程序。又花了半响时刻把C代码优化了下,提高了代码功率。晚上回家就把此比如记录下来,以供参阅。

一、功用介绍:

本规划选用台湾的义隆单片机EM78P458,此单片机内部有4K*13bit一次性ROM(OTPROM)此单片机内带8位多路AD,精度到达13位。结合3片74HC164来对三个数码管进行数据传输,完成数据的串转并,节省了单片机的I/O口资源;本规划仅仅个举例使用,为了学习74HC164的使用和义隆单片机C言语的使用。实践使用中三个数码管显现可以用一个74HC164来赋数据,三个I/O口来扫描,动态扫描来显现。详细不做详细介绍。A/D端口输入电压规模:0~5V。显现准确到小数点后2位。

二、详细电路如下:

三、完好程序

//**************Voltage**************

//Use %&&&&&%: EMC78P458**

//Author: zhengwen**

//Date: 2007.1.22**

//74HC164_PIN Q0~Q7 =LED_PIN a~h**

//P57==CLRP55==CLOCK P56==data**

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

#include “em78x458_9xx.h”

#defineuchar unsigned char

#defineuint unsigned int

#defineDATA R56//Databit of 74HC164

#defineCLKR55//Clock bit of 74HC164

#defineDATA_CLRR57//Clrbit of 74HC164

#defineENI()_asm{eni}

//****************存储空间分配**************

unsigned short ledm@0x20:bank 1;//short占用2个存储空间

unsigned short ledtemp @0x22:bank 1;//AD核算时分的中间量

unsigned charAD_data @0x24:bank 1;//AD收集数据存储地址

unsigned charled1@0x20:bank 0;//第1位数码管显现数

unsigned charled2@0x21:bank 0;//第2位数码管显现数

unsigned charled3@0x22:bank 0;//第3位数码管显现数

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

//************Table of LED******************

const unsigned char table[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

const unsigned char table1[16]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x88,0x00,0x10,0x08,0x03,0xC6,0xA1,0x86,0x8E};

//用const今后table里的数据就存放在ROM里,否则是存在RAM里

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

//*******Subprogram of Delay****************

void delay(void)

{unsigned shorti;

for(i=0;i<60000;i++)

{;}

}

//***********AD参数设置子程序***************

void DO_AD(void)

{

ADCON=0x08;//挑选AD0

ADCOM=0x01;//模拟信号进行转化并设置转化

P6CR=1;

GCON=0;//挑选ADC增益和作业电压

ADPD=1;//制止ADC的低功耗形式

ENI();//开中止

ADRUN=1;//发动ADC

while(ADRUN==1);//等候AD转化完毕

AD_data=ADDATA; //AD数据存储到AD_data地址中

}

//******Send Data Subprogram***********

void sendData(uchar c)

{

unsigned char i;

bit temp;

for(i=0;i<8;i++)

{

if (c&0x80) temp=1;

else temp=0;

CLK=0;

DATA=temp;

CLK=1;

c<<=1;

}

}

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

//*******Initialization of Program***************

void init(void)

{

P5CR=0x00;//P5 as Output

P6CR=0x03;//PORT6的,1.2口为输入,其他口为输出

//PDCR=0xff;//下拉电阻设置

//ODCR=0x00;//高阻设置

//PHCR=0xff;//上拉电阻设置

WDTCR&=0xef;//”1″ enable R-option ,”0″ disable R-option

}

//*********Main Program********************

void main()

{

DATA_CLR=1;//unable clr bit of 74HC164

init();// I/O init

while(1)

{

DO_AD();

AD_data=ADDATA;

//******AD采样进来的数据转化*******

//******Vin=(Dx/256)*5 (V)*********

ledm=AD_data;

ledm=ledm*125;

ledtemp=ledm>>6;

led1=ledtemp/100;

led2=(ledtemp%100)/10;

led3=(ledtemp%100)%10;

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

delay();

sendData(table1[led1]);//输出显现

sendData(table[led2]);

sendData(table[led3]);

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/272038.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部