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

📄 main.c

📁 基于单片机89C51和ds18b20的汇编程序
💻 C
字号:
#include <msp430x14x.h>
#include "DS18B20.h"
//不同的底层接口,只需改变宏定义即可 
#define LCD_COM_DDR     P2DIR  //液晶com端控制口,其中低四位为COM端控制口.高四位为S端控制口
#define LCD_COM_PORT    P2OUT   
#define LCD_SEG_DDR_A   P3DIR   //液晶S端控制口
#define LCD_SEG_PORT_A  P3OUT


unsigned char lcd_scan[4] = {0xf1,0xf2,0xf4,0xf8};//com端扫描时端口所赋的值
unsigned char LcdSeg[11]  = {0xED,0x28,0xB5,0xB9,0x78,0xD9,0xDD,0xA8,0xFD,0xF9,0x00};//显示译码,0~9,灭
unsigned char temp[6];//6个数字的显示缓冲区
unsigned char digit[8];//经组合后的S端码存放区
unsigned char lcd_count = 0;

int main(void)
{
   
   char i;
   long  count_a,count = 0;
   LCD_SEG_DDR_A   = 0xff;//Px口为输出口
   LCD_COM_DDR    |= 0xf0;//Px口的高四位输出   
   WDTCTL = WDTPW +WDTHOLD;                  // Stop Watchdog Timer     
   initialize_clk();
   for(;;) 
   {
        count = ReadTemperature();
        count_a = count;               
        for(i = 0;i<6;i++)//将一个数诼位分离,并译成相应的段码  
        {  

            temp[i] = LcdSeg[count_a%10];           
            count_a /= 10;
        } 
        temp[4] = temp[4] + 0x02;//为该位数字加上一个点,这是给某位数加点的方法
        
                
        //每次一个COM信号时,对6个液晶码进行扫描,digit[0]~digit[7]是对6个段码在每一次com信号来时的组合
        digit[0] = (temp[3]&0x03)     |((temp[2]<<2)&0x0c)|((temp[1]<<4)&0x30)|((temp[0]<<6)&0xc0);
        digit[1] = ((temp[3]>>2)&0x03)|(temp[2]&0x0c)     |((temp[1]<<2)&0x30)|((temp[0]<<4)&0xc0);
        digit[2] = ((temp[3]>>4)&0x03)|((temp[2]>>2)&0x0c)|(temp[1]&0x30)     |((temp[0]<<2)&0xc0);
        digit[3] = ((temp[3]>>6)&0x03)|((temp[2]>>4)&0x0c)|((temp[1]>>2)&0x30)|(temp[0]&0xc0);
        digit[4] = ((temp[5]<<4)&0x30)|((temp[4]<<6)&0xc0);
        digit[5] = ((temp[5]<<2)&0x30)|((temp[4]<<4)&0xc0);
        digit[6] = (temp[5]&0x30)     |((temp[4]<<2)&0xc0);
        digit[7] = ((temp[5]>>2)&0x30)|(temp[4]&0xc0); 
        
        
/*********************************定时调用下面代码即可,可以放在定时中断中,************************************/
        if(lcd_count<4)
        {   
             LCD_COM_DDR  = lcd_scan[lcd_count];
             LCD_COM_PORT = (digit[lcd_count+4]&0xf0);//Px口的高四位输出段码,低四位为0
             LCD_SEG_PORT_A = digit[lcd_count]; 
        }
        else
       {  
            LCD_COM_DDR  = lcd_scan[lcd_count-4];  
            LCD_COM_PORT = ((~digit[lcd_count])&0xf0)|(lcd_scan[lcd_count-4]&0x0f);
            LCD_SEG_PORT_A = ~digit[lcd_count-4];
       }
       ++lcd_count;            
       if(lcd_count == 8)
       {   
             lcd_count = 0;
       }               
/***********************************************************************************************************/ 
  }            
}

⌨️ 快捷键说明

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