📄 c.txt
字号:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
sbit CLK = P1^2 ;
sbit DAT = P1^3 ;
sbit ADDR = P1^6 ;
sbit P17 = P1^7 ;
sbit CS1543 = P2^4 ;
sbit YJRS = P2^5; // 片选端,高电平有效
sbit YJRW = P2^6; // 串行数据输入端
sbit YJCE = P2^7; // 串行同步时钟,上升沿时读取
sbit RXD1 = P3^0 ;
sbit TXD1 = P3^1 ;
bit RD1 ; // 空闲标志位
unsigned char code BUF[]={"毕设 电压表 电压为: 伏"};
unsigned char shiwei;
unsigned char gewei;
unsigned char point_1;
unsigned char point_2;
unsigned char point_3;
unsigned int ad=12;
uchar idata zhu[5];
#define FIRST_ADDR 0 //定义字符/汉字显示起始位置
void change_data(void);
void disp_data(void);
//延时子程序
void delay(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
//测忙
void chk_busy(void)
{ RD1=1;
P0 = 0xff ;
delay(5);
YJRS=0;
YJRW=1;
YJCE=1;
while(P0&0x80)
{ };
YJCE=0;
RD1=0 ;
}
//读数据
unsigned char read_lcd()
{ unsigned char i;
RD1=1;
_nop_();
YJRS=1;
YJRW=1;
YJCE=1;
delay(5);
i=P0;
_nop_();
YJCE=0;
return i;
}
//写数据
void writedata_lcd(unsigned char dispdata)
{ RD1=1;
chk_busy();
_nop_();
YJRS=1; //RS为高,显示数据
YJRW=0;
YJCE=1;
P0=dispdata;
delay(5);
YJCE=0;
P0=0xff;
}
//写指令代码
void writecode_lcd(unsigned char cmdcode)
{ RD1=1;
chk_busy();
_nop_();
YJRS=0; //RS为低,显示指令数据
YJRW=0;
YJCE=1;
P0=cmdcode;
delay(5);
YJCE=0;
P0=0xff;
}
//初始化
void reset_lcd()
{ delay(2000);
writecode_lcd(0x30); //选择基本指令集
delay(5);
writecode_lcd(0x01); //清除显示,并且设定地址指针为00H
delay(5);
writecode_lcd(0x0c); //开显示(无游标、不反白)
delay(5);
writecode_lcd(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}
void hzklib()
{ char i;
writecode_lcd(0x80); //80为第一行起始位
for (i=0;i<=0x20;i++)
{
writedata_lcd(BUF[i]);
}
disp_data();
}
unsigned int TLC1543AD(unsigned char ADDRESS)
{ unsigned char i ;
unsigned int adresult;
CLK = 0 ;
CS1543 = 0 ;
adresult= 0 ;
for (i=0;i<0x0a;i++)
{
if (ADDRESS&0x08)
{ ADDR = 1 ;} //发送地址 ,高位优先
else
{ ADDR = 0 ;}
ADDRESS = ADDRESS*2 ;
CLK = 1 ;
adresult *= 2 ;
if (DAT)
{ adresult = adresult + 0x01 ;}
CLK = 0 ;
}
CS1543 = 1 ;
return(adresult) ;
}
void change_data(void)
{ int result ;
result = ad * 7.8 ;
shiwei=result/10000;
gewei=result%10000/1000;
point_1=result%1000/100;
point_2=result%100/10;
point_3=result%10;
}
void disp_data(void)
{
change_data();
writecode_lcd(0x8c); //8c为第三行第5位起始位
if(shiwei!=0)
writedata_lcd(shiwei+'0');
else
writedata_lcd(' ');
writedata_lcd(gewei+'0');
writedata_lcd('.');
writedata_lcd(point_1+'0');
writedata_lcd(point_2+'0');
writedata_lcd(point_3+'0');
}
//485初始化
void init232(void){
TMOD = 0x20;
TH1 = 0xe8;
TL1 = 0xe8;
PCON = 0x00;
TR1 = 1;
SCON = 0X50;
P17 = 1 ;
}
//发送程序
void send(uchar idata *d)
{ SBUF = shiwei ;
while(TI ==0);
TI = 0;
SBUF = gewei ;
while(TI ==0);
TI = 0;
SBUF = point_1 ;
while(TI ==0);
TI = 0;
SBUF = point_2 ;
while(TI ==0);
TI = 0;
SBUF = point_3 ;
while(TI ==0);
TI = 0;
}
main()
{
SP = 0x5f ;
YJRW=0;
reset_lcd(); //初始化LCD屏
init232();
delay(1000);
hzklib();
while(1)
{
ad=TLC1543AD(2);
disp_data();
delay(5000);
send(zhu);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -