设计程序,实现当按下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)
|