这是仿真图
这是运行图:就显示不出来,左边我自己加了一点
这是全部代码:
#include<reg51.h>
#include<intrins.h>
#include<math.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define uchar unsigned char
#define uint unsigned int
float getdata;
float x;
uint temp;
uchar dispbuf[8]={10,10,10,10,10,0,0,0};
uchar*p="0123456789";
uchar code table[]="20141547YSH";
uchar num;
sbit ST=P2^0;
sbit OE=P2^2;
sbit EOC=P2^1;
sbit CLK=P2^4;
sbit rs=P3^5;
sbit e=P3^4;
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void write_com(uchar com)//写指令函数
{
rs=0;//选择写命令模式
P0=com;//将要写的命令字送到数据总线上
delay(5);
//使能端给一高脉冲,因为初始化函数中将e置零
e=1;
delay(5);
e=0;//将使能端置0以完成高脉冲
}
void write_data(uchar dat)//写数据函数
{
rs=1;//选择写数据命令模式
P0=dat;
delay(5);
e=1;
delay(5);
e=0;
}
void init()//初始化函数
{
e=0;
write_com(0x38);//设置8位格式 两行
write_com(0x0c);//整体显示 关光标 不闪烁
write_com(0x06); //设置输入方式 增量不移位
write_com(0x01); //清屏
}
void main()
{
init();
ST=0;
OE=0;
ET0=1; //允许定时器计时器0中断
EA=1; //打开中断总开关
TMOD=0x12;
TH0=246;
TL0=226;
TR0=1; //定时器0运行控制位,当软件清0时,关闭定时器0
ST=0;
while(1)
{
write_com(0x80);
for(num=0;num<11;num++)
{
write_data(table[num]);
delay(5);
}
{
uchar i;
if(EOC==1)
{
OE=1;
getdata=P1;
OE=0;
//AD转换:255/5=实(AD)/输出
if (getdata>127)
{
write_com(0x80+0x40);
temp=(getdata-127)*10/255*100;
write_data('+');
write_data(p[temp/100]);//输出整数位
write_data('.'); //输出小数点
write_data(p[temp/10%10]);
write_data(p[temp%10]);
write_data('V');
write_data(table[num]);
}
else
{
write_com(0x80+0x40);
temp=(127-getdata)*10/255*100+3;
write_data('-');
write_data(p[temp/100]);//输出整数位
write_data('.'); //输出小数点
write_data(p[temp/10%10]);
write_data(p[temp%10]);
write_data('V');
write_data(table[num]);
}
ST=1;
ST=0;
}
delay(200);
}
//write_com(0x01);
}
}
Voidtime0(void) interrupt 1 using 0//定时器计数器0
{
CLK=~CLK;
}
|