原创 罗斯蒙特变送器液晶表头驱动

2016-2-21 14:17 1600 16 16 分类: MCU/ 嵌入式
img_2271.jpg
img_2272.jpg
img_2273.jpg
 
/*********************************************************************************************
说明:罗斯蒙特压力变送器数字表头驱动
表头有个六针插座,双排三个.
标注1的是正5V,同排第二个是面板跳线HL切换的中间脚,即跳线跳到H时候,输出接电源正,跳到L时候输出接地,同排第三个是电源地
第二排与正挨着的是LOD引脚,接地时候显示不刷新,后台数据持续输入到内部移位寄存器,高电平时候立即把内部寄存器显示出来
第二排中间的是CLK时钟输入脚,每次从低变高就把数据引脚的电平移入移位寄存器
第二排与地挨着的是DAT引脚,高电平笔画点亮,低电平熄灭
/*********************************************************************************************/
 
#include <REG51.h> //通用89C51头文件
#include <intrins.h>
sfr AUXR = 0x8e;                    //Auxiliary register
sbit DAT = P1 ^ 0; 
sbit CLK = P1 ^ 1; 
sbit LOD = P1 ^ 2; 
//显示用内存变量寄存器:倒数后四个是数字
unsigned char disp[8]={0x00,0x00,0x00,0x00,0xCF,0xDB,0x86,0xBF};
/*************  本地常量声明    **************/
unsigned char code t_display[]={                       //标准字库
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y
    0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e};
    
unsigned char code t_displaydot[]={
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
#define FOSC 11059200L
 
#define T1MS (65536-FOSC/100)      //1T模式
unsigned int adc_value;
 
/**********************************************************************************************/
 
/**************** 向显示器发送显示数据 ******************/
void Send()
{       
unsigned char  i,j,k;
for(i=0; i<8; i++)
{
k=disp;
for(j=0; j<8; j++)
{
k <<= 1;
DAT   = CY;
CLK = 1;
CLK = 0;
 
}
}
LOD = 1;
LOD = 0;
}
 
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a)
{
unsigned char i, j;
while( a-- != 0)
{
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
/*********************************************************************************************/
 
/*********************************************************************************************
函数名:定时/计数器初始化函数
调  用:T_C_init();
参  数:无
返回值:无
结  果:设置SFR中T/C1和(或)T/C0相关参数
备  注:本函数控制T/C1和T/C0,不需要使用的部分可用//屏蔽
/**********************************************************************************************/
void Timer0Init(void) //50毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xF0; //设置定时初值
TH0 = 0x4B; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
 
    ET0 = 1;                        //使能定时器0中断
    EA = 1;
}
/**********************************************************************************************/
 
 
//-----------------------------------------------
 
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
unsigned char i;
i++;
if (i>19)
{ i=0;
adc_value++;
if (adc_value>9999)
{
adc_value=0;
}
}
 
}
 
//-----------------------------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
void main (void)
{
Timer0Init();
//UART_init();
while(1)
{
 
DELAY_MS(100);
// disp[3] = t_display[adc_value / 10000];
disp[7] = t_display[adc_value % 10000 / 1000];
disp[6] = t_displaydot[adc_value % 1000 / 100];
disp[5] = t_display[adc_value % 100 / 10];
disp[4] = t_display[adc_value % 10];
Send();
// UART_TC("d9887321$");
 
}
}
 

文章评论0条评论)

登录后参与讨论
我要评论
0
16
关闭 站长推荐上一条 /2 下一条