标题:
51单片机ADC分压键盘源程序
[打印本页]
作者:
zhangru961029
时间:
2017-7-6 10:19
标题:
51单片机ADC分压键盘源程序
设计程序,实现当按下
ADC
分压键盘时,将相应的键号(
01-16
)通过两片具有
SPI
接口的
74HC595
芯片驱动最右端两个
7
段数码管显示,其余
6
个数码管关闭
将adc分压按键按下时的模拟输入电压值送数码管显示,比如4.995v时,显示4.995
单片机源程序如下:
#include "reg51.h"
#define TIMS 65500
#define TIMS1 3036
#define SSIG 1
#define SPEN 1
#define DORD 0
#define MSTR 1
#define CPOL 1
#define CPHA 1
#define SPR1 0
#define SPR0 0
#define SPEED_4 0
#define SPEED_16 1
#define SPEED_64 2
#define SPEED_128 3
#define SPIF 0x80
#define WCOL 0x40
sfr SPSTAT =0xCD;
sfr SPCTL =0xCE;
sfr SPDAT =0xCF;
sfr AUXR =0x8E;
sfr AUXR1 =0XA2;
sfr CLK_DIV=0x97;
sfr P5=0xC8;
sbit HC595_RCLK=P5^4;
sbit EADC=IE^5;
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
sfr ADC_CONTR =0xBC;
sfr ADC_RES =0xBD;
sfr ADC_RESL =0xBE;
sfr P1ASF =0x9D;
unsigned char ch=4;
unsigned int a, b, c, d, e;
float voltage=0;
unsigned char tstr=0;
unsigned char code t_display[16]={0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,
0x39,0x5E,0x79,0x71
};
unsigned char code T_COM[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char code Mant[6]={0xbf,0x86,0xdb,0xcf,0xe6,0xed};
bit flag=0;
unsigned m=0;
void SPI_SendByte(unsigned char dat)
{
SPSTAT=SPIF+WCOL;
SPDAT=dat;
while((SPSTAT & SPIF)==0);
SPSTAT=SPIF+WCOL;
}
void seg7scan(unsigned char index1,unsigned char index2)
{
SPI_SendByte(~T_COM[index1]);
SPI_SendByte(t_display[index2]);
HC595_RCLK=1;
HC595_RCLK=0;
}
void Mscan(unsigned char index1,unsigned char index2)
{
SPI_SendByte(~T_COM[index1]);
SPI_SendByte(Mant[index2]);
HC595_RCLK=1;
HC595_RCLK=0;
}
void timer_0() interrupt 1
{
flag=1;
}
void adc_int() interrupt 5
{
unsigned char i=0;
ADC_CONTR &=!ADC_FLAG;
voltage=((ADC_RES*4+ADC_RESL)*5.0)/1024;
e=voltage*1000;
a=e/1000;
b=(e%1000)/100;
c=e%100/10;
d=e%10;
ADC_CONTR=ADC_POWER |ADC_SPEEDLL | ADC_START | ch;
}
void main()
{
unsigned char i;
unsigned int j=0;
SPCTL=(SSIG<<7)+(SPEN<<6)+(DORD<<5)+(MSTR<<4)
+(CPOL<<3)+(CPHA<<2)+SPEED_4;
CLK_DIV=0x00;
TL0=TIMS;
TH0=TIMS>>8;
AUXR&=0x3F;
AUXR1=0X08;
TMOD=0x00;
TR0=1;
ET0=1;
P1ASF=0x10;
ADC_RES=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL | ADC_START | ch;
for(j=0;j<10000;j++);
EADC=1;
EA=1;
while(1)
{
if(flag==1)
{
flag=0;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
新建文件夹.rar
(29.92 KB, 下载次数: 44)
2017-7-6 10:17 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2017-7-7 04:56
好资料,51hei有你更精彩
作者:
tt98
时间:
2017-7-7 08:44
看看是不是STC的
作者:
mervinol
时间:
2018-7-2 09:36
很棒很棒
作者:
mervinol
时间:
2018-7-2 09:43
特别棒的!
作者:
mervinol
时间:
2018-7-2 09:47
给力 很给力
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1