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

📄 lcd.c

📁 将C8051F040单片机的8路A/D及片内温度传感器的采样值通过串口发送到上位机上
💻 C
字号:
#include "c8051f040.h"
#include <intrins.h>		//	液晶点阵显示试验  -128*64,控制器DM12864I
#include "STDIO.h"
#include "ADC.h"
#include "const.h"
unsigned int result[9];
void Delay1us(unsigned char);
void Delay1ms(unsigned char);
void Delay1s(unsigned char T);           
void ADC0_Init (void)
{
   char SFRPAGE_SAVE = SFRPAGE;        // 保存当前SFRPAGE
   SFRPAGE = LEGACY_PAGE;              // 改变页

   REF0CN = 0x07;

   SFRPAGE = ADC0_PAGE;                // 改变页
	ADC0CF    = 0x10;
    ADC0CN    = 0xC0;
   AMX0SL = 0x00;                      // 选择AIN0作为ADC mux输出
   //ADC0CF = (SYSCLK/2500000) << 3;     // ADC转换时钟= 2.5MHz
   //ADC0CF &= ~0x07;                    // PGA gain = 1

   SFRPAGE = SFRPAGE_SAVE;             // 恢复SFRPAGE
}

void ADC0_Conver (void)
{
   unsigned char i;   // ADC mux 通道 (0-8)
   unsigned int data temp;
   char SFRPAGE_SAVE = SFRPAGE;        // 保存当前SFRPAGE
   SFRPAGE = ADC0_PAGE;                // 改变页

   for (i=0;i<9;i++)
   {
		AMX0SL = i;				            // 设置mux到通道
		Delay1ms(1);
		AD0INT = 0;                      // 清除ADC转换完成标志
		AD0BUSY = 1;
		while (!AD0INT);
		temp = ADC0H;
		temp = temp*256 + ADC0L;
		result[i] = temp;                // 读ADC值
   }

   SFRPAGE = SFRPAGE_SAVE;             // 恢复SFRPAGE
   }
void Timer_Init()
{
   SFRPAGE   = TMR3_PAGE;
    TMR3CN    = 0x04;
    TMR3CF    = 0x08;
    RCAP3L    = 0x60;
    RCAP3H    = 0xFF;
}
void UART_Init()
{
	SFRPAGE   = UART0_PAGE;
    SCON0     = 0x50;
    SSTA0     = 0x1A;
	ES0=0;
	PS=0;
	TI0=1;
	RI0=0;
}
void Port_IO_Init()
{
    // P0.0  -  TX0 (UART0), Open-Drain, Digital
    // P0.1  -  RX0 (UART0), Open-Drain, Digital
    // P0.2  -  Unassigned,  Open-Drain, Digital
    // P0.3  -  Unassigned,  Open-Drain, Digital
    // P0.4  -  Unassigned,  Open-Drain, Digital
    // P0.5  -  Unassigned,  Open-Drain, Digital
    // P0.6  -  Unassigned,  Open-Drain, Digital
    // P0.7  -  Unassigned,  Open-Drain, Digital

    // P1.0  -  Unassigned,  Open-Drain, Digital
    // P1.1  -  Unassigned,  Open-Drain, Digital
    // P1.2  -  Unassigned,  Open-Drain, Digital
    // P1.3  -  Unassigned,  Open-Drain, Digital
    // P1.4  -  Unassigned,  Open-Drain, Digital
    // P1.5  -  Unassigned,  Open-Drain, Digital
    // P1.6  -  Unassigned,  Open-Drain, Digital
    // P1.7  -  Unassigned,  Open-Drain, Digital

    // P2.0  -  Unassigned,  Open-Drain, Digital
    // P2.1  -  Unassigned,  Open-Drain, Digital
    // P2.2  -  Unassigned,  Open-Drain, Digital
    // P2.3  -  Unassigned,  Open-Drain, Digital
    // P2.4  -  Unassigned,  Open-Drain, Digital
    // P2.5  -  Unassigned,  Open-Drain, Digital
    // P2.6  -  Unassigned,  Open-Drain, Digital
    // P2.7  -  Unassigned,  Open-Drain, Digital

    // P3.0  -  Unassigned,  Open-Drain, Digital
    // P3.1  -  Unassigned,  Open-Drain, Digital
    // P3.2  -  Unassigned,  Open-Drain, Digital
    // P3.3  -  Unassigned,  Open-Drain, Digital
    // P3.4  -  Unassigned,  Open-Drain, Digital
    // P3.5  -  Unassigned,  Open-Drain, Digital
    // P3.6  -  Unassigned,  Open-Drain, Digital
    // P3.7  -  Unassigned,  Open-Drain, Digital
       // 保存当前SFRPAGE
   SFRPAGE = CONFIG_PAGE;              // 改变页

   //交叉开关配置
	XBR0 = 0x04;
	XBR1 = 0x00;
	XBR2 = 0x40;
	// P0 口分配状况
	// P0.0 = UART0 TX
	// P0.1 = UART0 RX

   //输出方式
   P5MDOUT = 0xf0;         
}
void Oscillator_Init()
{
	SFRPAGE   = CONFIG_PAGE;
    OSCICN    = 0x83;
}
void Delay1us(unsigned char T) 
{	while(T){
	T--;
	}
}
void Delay1ms(unsigned char T)
{
	while (T)
	{
		Delay1us(200);
		Delay1us(200);
		Delay1us(200);
		Delay1us(200);
		Delay1us(200);
		T--;
	}
}
void Delay1s(unsigned char T)
{
	while (T)
	{
		Delay1ms(200);
		Delay1ms(200);
		Delay1ms(200);
		Delay1ms(200);
		Delay1ms(200);
		T--;
	}
}
void main(){
	unsigned int i;
   float voltage;
   unsigned int tp;
   Oscillator_Init();
    WDTCN=0xDE;                    //禁止看门狗定时器
    WDTCN=0xAD;
	Port_IO_Init();
	Timer_Init();
    UART_Init();
  	ADC0_Init();
while(1)
	{
      Delay1ms(2000);
      ADC0_Conver();

      SFRPAGE = UART0_PAGE;               // 改变页
      printf("\n");
      SFRPAGE = CONFIG_PAGE;              // 改变页

		for (i=0;i<9;i++)
	  	{
        	voltage=result[i]*2430.0/4095;
         tp = voltage;
			switch(i)
			{
         	case 8:
   				voltage=(tp-776)/2.86;
               tp = voltage;
               SFRPAGE = UART0_PAGE;               // 改变页
        			printf ("Chip temperature is %d\n",tp);
               SFRPAGE = CONFIG_PAGE;              // 改变页
				break;
				default:
               SFRPAGE = UART0_PAGE;               // 改变页
      			printf ("Channel %d voltage is %dmV\n",i,tp);
               SFRPAGE = CONFIG_PAGE;              // 改变页
				break;
		 	}
   	}
	}
	}

⌨️ 快捷键说明

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