历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2018年01月14日 | 1602液晶显示的电压表程序

2018-01-14 来源:eefocus

STC12C5406AD 晶振频率为12MHz 指令周期:本程序取:1.0us/6倍。

本程序已调试完成:

功能说明:STC12C5406AD+74HC164+1602液晶显示的电压表。
测量电压:采用10位AD测量,测量结果非常准确。
#include "stc12c5410ad.h"//头文件
#include "intrins.h"
#define uchar unsigned char//宏定义

#define uint unsigned int//宏定义


sbit RS=P3^4;//定义I/O的硬件接口
sbit E=P3^7;

sbit A_B=P3^2;
sbit CP=P3^3;

sbit Simulation=P1^7;//模拟电压输入

uint temp;


uchar code DispTab_1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//1602:0-9 数字
uchar code DispTab_2[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//温度符号
uchar DispBuf[6]; //6字节的显示缓冲区
char char_char_1[]={" www.mdizi.com "};//定义字符串

void delay(uint z)//1ms延时

uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
{
for(x1=0;x1<1;x1++);
}
}
}

void delay1()//经精准计算,该段程序1次延时时间为 19.53us;多次调用需要重新计算。
{
_nop_();
_nop_();
_nop_();
}


void write_Directive(uchar a)//写指令

uchar i,temp;
for(i=0;i<8;i++)
{
temp=a;
temp&=0x80;
if(temp==0x80)
A_B=1; 
else 
A_B=0;
a=a<<1;
delay1();
CP=0;
delay1();
CP=1;
delay1();
CP=0;
}

RS=0;
delay(3);
E=0;
delay(3);
E=1;
delay(3);
E=0;
delay(3);
}

void write_Data(uchar a)//写数据

uchar i,temp;
for(i=0;i<8;i++)
{
temp=a;
temp&=0x80;
if(temp==0x80)
A_B=1; 
else 
A_B=0;
a=a<<1;
delay1();
CP=0;
delay1();
CP=1;
delay1();
}

RS=1;
delay(3);
E=0;
delay(3);
E=1;
delay(3);
E=0;
delay(3);

}

void init()//初始化
{
uchar i;
CP=1;
A_B=1;
delay(15);
write_Directive(0x38);
delay(5);
write_Directive(0x38);
delay(5);
write_Directive(0x38);
write_Directive(0x01);
write_Directive(0x02);///初始化后数据地址为0x80;即第一行,第一个位置
write_Directive(0x0c);
write_Directive(0x80+0x40);//第二行第一位地址
for(i=0;i<16;i++)
{
write_Data(char_char_1[i]);//显示字符串" www.mdizi.com "
}

}

void Temperature_symbol()//温度符号
{
uchar i;
for(i=0;i<8;i++)
{
write_Directive(0x40+i);//写入温度符号
write_Data(DispTab_2[i]);
}
}

void write_Data_String()//显示时间函数

uchar i;
unsigned int mm;
DispBuf[0]=temp/10000;//显示百位
mm=temp%10000;

DispBuf[1]=mm/1000;//显示十位
mm=mm%1000;

DispBuf[2]=mm/100;//显示个位
mm=mm%100;

DispBuf[3]=mm/10;//显示小数点:0.001
DispBuf[4]=mm%10;//显示小数点:0.0001


i=DispBuf[0];
DispBuf[0]=DispTab_1[i];//查表,取字符
i=DispBuf[1];
DispBuf[1]=DispTab_1[i];
i=DispBuf[2];
DispBuf[2]=DispTab_1[i];
i=DispBuf[3];
DispBuf[3]=DispTab_1[i];
i=DispBuf[4];
DispBuf[4]=DispTab_1[i];

write_Directive(0x80+0x04);//第一行,第五个位置地址

write_Data(DispBuf[0]);//第一行,第五个位置

write_Data('.');//第一行,第六个位置

write_Data(DispBuf[1]);//第一行,第七个位置 
write_Data(DispBuf[2]);//第一行,第八个位置

write_Data(DispBuf[3]);//第一行,第九个位置

write_Data(DispBuf[4]);//第一行,第十个位置

write_Data('V');

}

void I_O_init()
{
P1M1=0x80;
P1M0=0x80; 
}


void ADC_Conversion()//ADC开始转
{
ADC_CONTR=0x87;
delay(1);
ADC_CONTR=0x8f;
delay(1);
//while((ADC_CONTR==0x8f));
ADC_CONTR=0x87;
delay(1);
}

void ADC_Calculated()//ADC计算
{

float temp1;
float temp2;
uint teMP3;

temp=ADC_DATA;//高8位
temp1=temp;
temp=temp1/256*5*10000;//高8位计算

temp3=ADC_LOW2;//低2位
temp2=temp3;
temp3=temp2/256*5*10000;//低2位计算

temp=temp+temp3;//高8位的计算值+低2位的计算值=实际值


}

void main()
{
init();
I_O_init();//I/O口初始化
Temperature_symbol();//写入温度符号
while(1)
{
ADC_Conversion();//ADC开始转
ADC_Calculated();//ADC计算
write_Data_String();//显示温度
delay(1000);
}
}



推荐阅读

史海拾趣

CW Industries公司的发展小趣事

面对电子信息行业的快速发展和变化,CW Industries始终保持着敏锐的市场洞察力。公司紧跟技术潮流,不断调整和优化产品结构,以满足客户不断变化的需求。例如,随着智能家居和物联网的兴起,CW Industries积极开发适用于这些新兴领域的产品和解决方案。这种灵活应变的能力使得CW Industries在电子行业中始终保持着领先地位,并为公司带来了持续的增长和发展。

安美通(APPCON)公司的发展小趣事

随着市场的不断变化和客户需求的升级,安美通意识到只有不断创新才能在竞争中立于不败之地。因此,公司加大了对研发的投入,积极引进高端人才,并与多所高校和研究机构建立了紧密的合作关系。通过持续的技术创新,安美通成功推出了一系列具有自主知识产权的新产品,进一步巩固了其在行业内的领先地位。

FCT Electronics公司的发展小趣事

在国内市场取得成功后,FCT Electronics开始将目光投向国际市场。公司积极参加国际电子展会,与多家国际知名企业建立了合作关系。凭借出色的产品性能和专业的客户服务,FCT Electronics的测试设备逐渐在海外市场上占据了一席之地,为公司的国际化发展奠定了坚实基础。

DUBILIER公司的发展小趣事

DUBILIER公司非常重视人才的培养和发展。公司建立了完善的人才培训体系,为员工提供各种培训和发展机会。通过内部培训和外部引进相结合的方式,DUBILIER公司培养了一支高素质、专业化的技术和管理团队。这些人才不仅为公司的发展提供了强大的支持,还为公司赢得了更多的商业机会和合作伙伴。

EMBEST公司的发展小趣事

XXXX年,ARM公司投资了EMBEST,双方建立了紧密的战略合作关系。这一合作不仅为EMBEST带来了更多的技术支持和资源,也进一步巩固了其在ARM开发工具领域的领先地位。通过与ARM的紧密合作,EMBEST不断推出创新产品,满足市场的多样化需求。

Gulf Semiconductor公司的发展小趣事

在XXXX年12月,EMBEST成为了Microsoft银牌合作伙伴。这一荣誉的获得标志着EMBEST在软件开发和服务方面得到了业界的广泛认可。作为Microsoft银牌合作伙伴,EMBEST将能够更好地利用Microsoft的技术和资源,为客户提供更优质的服务和解决方案。

问答坊 | AI 解惑

求示波器原理的资料

找了好久,市场上没有一本关于示波器的书,淘宝也搜了。最多有本用示波器修电视机的。哪能找到些好书啊?有电子版的给我发一份好吗?先谢了。hongyijiabox@163.com…

查看全部问答>

发帖发问一个bootloader问题并邀请学习6410,PXA3XX等高级货的同志了!

这几天看了6410的eboot,并对nk.bin以及nk.nb0文件重新了解了一下,发现了很多疑问。 主要是我以前一直用ADS bootloader,现在觉得两者有不可思议的差别。 一、ADS bootloader没有拷贝全局变量到RAM的行为,但是eboot.nb0有——但是这两个格式的 ...…

查看全部问答>

急!!!IIC0改成IIC1!

如题。用的2450的板子,wince5.0的平台。现在用IIC1接我的IC芯片。现在拿到手的IIC驱动是IIC0的,即用的GPE14\\GPE15,我需要将其换成IIC1,即GPB7\\GPB8。我做了如下修改: 1、 WINCE500\\PLATFORM\\SMDK2450\\Src\\Drivers\\IIC\\i2c.c中 //#de ...…

查看全部问答>

菜鸟提问,请指教。关于中断

void int0_init(void) {         if(rEINTPEND == (1…

查看全部问答>

cramfs根文件系统启动问题

我用的优龙YL2410开发板,最近想自己制作一个cramfs跟文件系统,参考网上比较著名的一个文档《Linux系统移植》的根文件系统制作部分自己制作了一个cramfs的文件系统my_rootfs.cramfs,其中busybox使用的是1.1.3。把my_rootfs.cramfs烧写到板子后发 ...…

查看全部问答>

wince5.0 S3c2440官方bsp,带camera驱动

wince5.0 S3c2440官方bsp,带camera驱动: http://www.itxxh.cn/book/2440/zaxsw1565.shtml WINCE5.0系统下,OV9650 CAMERA驱动程序: http://www.itxxh.cn/book/2440/zaxsw1568.shtml…

查看全部问答>

sim卡座无电

我用的sim300模块,连不上线,后来发现模块给sim卡座供电的管脚没有电,这是什么原因?以前的时候一切都正常,最近要用了,却出毛病了。…

查看全部问答>

怎么样的汇编代码才算绝对地址代码,生成obj里的也没有浮动地址。

怎么样的汇编代码才算绝对地址代码,生成obj里的也没有浮动地址。 是不是代码里不要段这个伪操作就可以了?…

查看全部问答>

LM3s8962体验之五……精确的位操作

Bit-banding 又称为:极细微的位处理操作, 精确的位操作,位别名区。 为了减少读-修改-写(RMW)操作的时间,ARM在Cortex-M3处理器中引入了bit-banding技术。在bit-banding使能的处理器中,存储器映射的特定区域(SRAM和外设区)能够使用地址别 ...…

查看全部问答>

论坛的论坛,不是在做电源吗?人呢?

怎么回事,没人参加吗?好萧条啊…

查看全部问答>