利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但是使用的元器件数目最少。
#include
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,0,0,0,0};
unsigned char dispcount;
unsigned char getdata;
unsigned int temp;
unsigned char i;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
void main(void)
{
ST=0;
OE=0;
ET0=1;
ET1=1;
EA=1;
TMOD=0x12;
TH0=216;
TL0=216;
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
TR1=1;
TR0=1;
ST=1;
ST=0;
while(1)
{
if(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
temp=getdata*235;
temp=temp/128;
i=5;
dispbuf[0]=10;
dispbuf[1]=10;
dispbuf[2]=10;
dispbuf[3]=10;
dispbuf[4]=10;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
while(temp/10)
{
dispbuf[i]=temp;
temp=temp/10;
i++;
}
dispbuf[i]=temp;
ST=1;
ST=0;
}
}
}
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%6;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
if(dispcount==7)
{
P1=P1 | 0x80;
}
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
关键字:单片机 数字电压表 AT89S51 ADC0809
引用地址:
单片机制作的数字电压表及源代码
推荐阅读最新更新时间:2024-03-16 13:07
AVR复习笔记--AVR单片机SPI多机通讯
最近决定复习下AVR单片机,其实也是为了借此复习下几种简单的通信协议,包括串口,SPI,I2 C等。 本来以为一两个晚上就能搞定的事儿,没想到竟耗费了一周晚上空余的时间。 当然主要是这次的要求要提高点,实现SPI的多机通信, 不但要发数据还要回传数据。 实际中还是遇到了比我想象中要大的多的困难。 即使是现在的实现方式也不是很理想。 下面是spi部分的代码,由于spi接收发送用的同一终端,感觉使用起来形式不怎么样,还是采用了轮询标志位的方式 Code #include spi.h static char mode=1; void spi_init(char flag) { char tmp=0;
[单片机]
中国码电波机芯源码(仅供参考)MSP430单片机程序
电波钟源码:中国码机型的,有兴趣可以拿去参考吧。改下硬件引脚就可以了 不详细解说了,能看懂得应该都懂 单片机源程序如下: #include msp430x14x.h typedef unsigned char uchar; typedef unsigned int uint; #define XTOFF 0x40 #define DataDir P4DIR #define DataPort P4OUT #define Busy 0x80 #define CtrlDir P3DIR #define CLR_RS P3OUT&=~BIT0; /
[单片机]
平凡单片机教学 第九讲 单片机指令(三)
2、累加器A与片外RAM之间的数据传递类指令 MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 说明: 1)在51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。 2)要读或写外部的RAM,当然也必须要知道R
[单片机]
MSP430单片机的特点、分类和优缺点
MSP430单片机 MSP430系列单片机是德州仪器1996年开始推向市场的一种16位超低功耗的混合信号处理器,给人们留下的最大的亮点是低功耗而且速度快,汇编语言用起来很灵活,寻址方式很多,指令很少,容易上手。主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。其迅速发展和应用范围的不断扩大,主要取决于以下的特点… 特性: 强大的处理能力,采用了精简指令集(RISC)结构,具有丰富的寻址方式( 7 种源操作数寻址、 4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在
[单片机]
台积电RRAM技术引入英飞凌汽车MCU
11月25日,英飞凌和 台积电 宣布,两家公司正准备将 台积电 的电阻式RAM( RRAM )非易失性存储器(NVM)技术引 入英飞凌 的下一代AURIX™微控制器(MCU),并将在 台积电 的28纳米节点上制造。 自第一个发动机管理系统问世以来,嵌入式闪存微控制器一直是汽车电子控制单元(ECU)的主要构建块。目前,市场上大多数MCU系列都基于嵌入式闪存技术(eFlash)技术。而 RRAM 是嵌入式存储器的下一步,可以进一步扩展到28纳米及以上。 英飞凌AURIX TC4x MCU系列将性能扩展与虚拟化、安全和网络功能的最新趋势相结合,以支持下一代软件定义的车辆和新的E/E架构。 据介绍,基于台积电 RRAM 技术的
[汽车电子]
单片机ATmega8读取165串入的拨码开关程序
/***********74HC165并入串出例子程序************/ // 单片机 ATmega8读取165串入的拨码开关地址 // // 晶振:内部1M // // Author:wanghu // // AVRGCC @2008.6.1 // /**********************************************/ #include avr/io.h #include util/delay.h /**********定义位操作的位移宏 by wanghu********/ #define setb
[单片机]
单片机存储器和I/O接口组织
微处理器对I/O接口寻址的方式可分为两大类,一种是内存映射式寻址( Memory Mapped I/O),另一种是输入输出映射式寻址(I/O Mapped I/O)。 内存映射式寻址采用了I/O接口与存储器统一编址的方式,这种方式是将I/O接口看成内存区域中的一个或几个单元,占用内存区域中的一些地址。这种方式的优点是,不需专门的I/O指令,而采用访问内存的指令来访问I/O接口。一般来说,访问内存的指令功能是比较强的,因而这种方法可以像访问内存那样,直接对I/O接口的信息进行处理。这种方式的缺点是地址的利用率较低。I/O接口占用内存的一部分地址,使得内存可寻址的区域减少。由于存储器需占用的地址由该芯片的容量决定,且其占用的地址
[单片机]
单片机在晶闸管触发电路中的应用
0 前 言 在电力拖动系统、电炉控制系统中现已大量采用可控硅(晶闸管)元件作为可调电源向电动机或电炉供电,这种由晶闸管组成的控制系统,主要是利用改变可控硅的控制角θ来调节供电电压。在常规控制中,主要是用电子控制装置对可控硅实现触发,这种方法由于受到电子元器件的限制,其分辨率不高,有时还会出现误触发。本文介绍一种由8031单片机组成的触发控制系统,可实现高分辨率的数字触发。 1 硬件组成及原理 系统硬件组成如,只须在8031最小系统上加一块16位的定时/计数器8253和晶振电路,另加一块带一个14位定时/计数器的可编程RAM/IO扩展器8155,即可组成单片机的系统线路。 1.1 θ角定时
[单片机]