⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stcad.c

📁 STC单片机AD的实现加8位595串行数码管显示
💻 C
字号:
#include <reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define nop() _nop_();_nop_();

sbit CLK  = P2^1;
sbit DAT  = P2^2;
sbit RCLK = P2^0;
sbit P27  = P2^7;

sfr P1M0 = 0X91;
sfr P1M1 = 0X92;
sfr ADC_CONTR = 0XC5;
sfr ADC_DATA  = 0XC6;
sfr ADC_LOW2  = 0XB1;

#define CHS0 0
#define CHS1 1
#define CHS2 2
#define ADC_START 3
#define SPEED0 5
#define SPEED1 6
#define ACD_POWER 7

ulong a;
unsigned char adl,adh,Temp;
unsigned int ad;

void delay_1ms(void);
void delay_nms(unsigned int n);
void sendbyte(uchar byte);
void out595(void);
void Display(unsigned long dat,unsigned char DotPosition,bit ClearZeroFlag);
void delay_1ms(void);

//---------------8位2进制段代码对应数码管笔段 hcdb afge----------------//
uchar code displaycode[] = {0x82,0xaf,0xc4,0x85,0xa9,0x91,0x90,0xa7,0x80,0x81,
				            0xa0,0x98,0xd2,0x8c,0xd0,0xf0,0xfd,0xff};//0-9,A-F,-,全灭
							//0x82,0xaf,0xc4,0x85,0xa9,0x91,0x90,0xa7,0x80,0x81,
				            //0xa0,0x98,0xd2,0x8c,0xd0,0xf0,0xfd,0xff

uchar PortCode[8] = {0,0,0,0,0,0,0,0};

main()
{
	P1M0 = 0X80;
	P1M1 = 0X80;

	while(1)
	{
		//----------初始化ADC_CONTR--------
		ADC_CONTR= (1<<ACD_POWER)|(1<<SPEED1)|(1<<SPEED0)|(1<<ADC_START)|(1<<CHS2)|(1<<CHS1)|(1<<CHS0);		
		//---------等待AD转换结果----------
		while(!(ADC_CONTR&0X10));    
		ADC_CONTR = ADC_CONTR&0Xef; 
		P27 = ~P27;
		adh = ADC_DATA;
		adl = ADC_LOW2;
		ad = adh<<2 + adl;
		Display(ad,0,1);
	}
}

void delay_1ms(void)              
  { 
   unsigned int i; 
   for (i=0;i<550;i++); 
  }
   
void delay_nms(unsigned int n)      
  { 
   	unsigned int c=0; 
   	for (c=0;c<n;c++) 
   	delay_1ms(); 
  }

void Display(unsigned long dat,unsigned char DotPosition,bit ClearZeroFlag)
{
	unsigned char i;

	for(i = 0; i != 8; i++)
	{ 	
		if(i == DotPosition)/// 小数点处理
			{
			PortCode[i] = (displaycode[(dat%10)]&0x7f);
			}
		else

		PortCode[i] = displaycode[dat%10];

		if(ClearZeroFlag&&(!dat)&&(i>DotPosition)) PortCode[i]=0xff;		

		dat /= 10;					
	}	

		sendbyte(PortCode[0]);		
		sendbyte(PortCode[1]);
		sendbyte(PortCode[2]);
		sendbyte(PortCode[3]);
		sendbyte(PortCode[4]);			  
		sendbyte(PortCode[5]);				   
		sendbyte(PortCode[6]);
		sendbyte(PortCode[7]);
		out595();
}

void sendbyte(uchar byte)
{    
        uchar c;  
   		for(c=0;c<8;c++)
         {
	         CLK=0;
	         DAT=byte&0x80;
	         byte=byte<<1;     
	         CLK=1;
         }        
}

void out595(void)
{
        RCLK=0;
        nop();
        RCLK=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -