📄 v.c
字号:
#include<reg51.h>
#include"absacc.h"
#define lcd_1602_DW XBYTE[0xfdff]
#define lcd_1602_CW XBYTE[0xfcff]
#define lcd_1602_CR XBYTE[0xfeff]
#define lcd_1602_DR XBYTE[0xffff]
#define lcd_line_1 0x00
#define lcd_line_2 0x40
#define LCD_ClEAR_SCREEN 0x01 //清屏
#define LCD_AC_UP 0x06 //地址计数器自动+1
#define LCD_SET_7 0x38 //工作方式设置8位数据总线接口,双行显示字符,5*7字符
#define LCD_SHOW 0x0C //显示开
#define uchar unsigned char
#define uint unsigned int
#define SUM 20
sbit SD0 = P1^0;
sbit CS = P1^2;
sbit CLK = P1^3;
sbit DIN = P1^1;
sbit WAY = P1^7;
unsigned long int tmp; //数据类型要注意
int i;
//////////判忙函数/////////////////
void WHILE_BUSY(void)
{
while((bit)(lcd_1602_CR & 0x80)) ; //读回DB7的值,为DB7=1时则等待 。
}
void delay(uint x)
{
while(--x);
}
void print0(uchar line,uchar column,uchar da ) //通过LCD1602内部ROM显示字符
{
WHILE_BUSY();
switch(line)
{
case 1:
lcd_1602_CW = 0x80 + column; //光标定位,即列地址
delay(10);
lcd_1602_DW =da; // 显示字符库的内容,数字的高八位编码位0X30
break;
case 2:
lcd_1602_CW = 0xc0 + column; //光标定位
delay(10);
lcd_1602_DW =da;
break;
default: break;
}
}
void Print(uchar *str,uchar addr) // 字符数组显示方法。用于不实时改变的字符
{
WHILE_BUSY();
lcd_1602_CW = 0x80|addr; //设置地址。地址范围0--127
while(*str!='\0')
{
WHILE_BUSY();
lcd_1602_DW = *str;
str++;
delay(50);
}
}
void lcd_1602_Init(void)
{
WHILE_BUSY();
lcd_1602_CW = LCD_SET_7; //写指令,8位接口,双行显示,5*7字符
WHILE_BUSY(); //判忙,不忙继续写指令
lcd_1602_CW = LCD_ClEAR_SCREEN; //清屏
WHILE_BUSY(); //判忙,不忙继续写指令
lcd_1602_CW = LCD_AC_UP; //地址计数自动加一
WHILE_BUSY();
lcd_1602_CW = LCD_SHOW; //开显示
}
/******************1543ADC**********/
uint TLC_1543_addr(uchar addr)
{
uint date_out=0;
uchar k;
uchar i;
uchar j;
CLK=0;
CS=0;
for (i=0;i<4;i++)
{
DIN=(bit)(addr&0x08);
CLK=1;
CLK=0;
addr<<=1;
}
for (j=0;j<6;j++) //填充6 个CLOCK
{
CLK=1;CLK=0;
}
CS=1;
delay(5);
CS=0; //等待AD 转换
delay(5);
for(k=0;k<10;k++)
{
SD0=1; //非P0口作为数据总线使用时,读入数据前要赋值1,特别
CLK = 1; //是既用于写有用于读的情况下.
date_out<<=1;
if(SD0) date_out += 1;
CLK = 0;
}
return(date_out);
}
void main()
{
int tmp1=0,STYLE=1;
i=SUM;
lcd_1602_Init();
while(1)
{
Print("10602 START NOW! ",lcd_line_1);
Print("voltage",lcd_line_2);
print0(2,7,10); //":"
if(WAY==0)
delay(5000);
if(WAY==0)
STYLE++;
if(STYLE==2) // 0---20挡位的显示函数
{
tmp1 += TLC_1543_addr(0x01); //取50次AD转换的结果,求平均值
i--;
if(i==0)
{
tmp1=tmp1/SUM;
tmp=tmp1*49999/1023;
tmp=4*tmp;
tmp1=0;
i=SUM;
print0(2,8,tmp/100000 +0x30);
print0(2,9,tmp/10000%10+0x30);
print0(2,11,tmp/1000%10+0x30);
print0(2,12,tmp/100%10+0x30);
print0(2,10,0x2e);
print0(2,13,0X56);
}
}
else
if(STYLE==1) //0---5挡位的显示函数
{
tmp1 += TLC_1543_addr(0x00); //取50次AD转换的结果,求平均值
i--;
if(i==0)
{
tmp1=tmp1/SUM;
tmp=tmp1*49999/1023;
tmp1=0;
i=SUM;
print0(2,8, tmp/10000 +0x30);
print0(2,10,tmp%10000/1000+0x30);
print0(2,11,tmp%10000%1000/100+0x30);
print0(2,12,tmp%1000%100/10+0x30);
print0(2,9,0x2e);
print0(2,13,0X56);
}
}
if(STYLE==3)
STYLE=1;
else
STYLE+=0;
print0(2,15,STYLE+0x30);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -