|
這是仿真圖
這是運行圖:就顯示不出來,左邊我自己加了一點
這是全部代碼:
#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)//寫指令函數(shù)
{
rs=0;//選擇寫命令模式
P0=com;//將要寫的命令字送到數(shù)據(jù)總線上
delay(5);
//使能端給一高脈沖,因為初始化函數(shù)中將e置零
e=1;
delay(5);
e=0;//將使能端置0以完成高脈沖
}
void write_data(uchar dat)//寫數(shù)據(jù)函數(shù)
{
rs=1;//選擇寫數(shù)據(jù)命令模式
P0=dat;
delay(5);
e=1;
delay(5);
e=0;
}
void init()//初始化函數(shù)
{
e=0;
write_com(0x38);//設(shè)置8位格式 兩行
write_com(0x0c);//整體顯示 關(guān)光標(biāo) 不閃爍
write_com(0x06); //設(shè)置輸入方式 增量不移位
write_com(0x01); //清屏
}
void main()
{
init();
ST=0;
OE=0;
ET0=1; //允許定時器計時器0中斷
EA=1; //打開中斷總開關(guān)
TMOD=0x12;
TH0=246;
TL0=226;
TR0=1; //定時器0運行控制位,當(dāng)軟件清0時,關(guān)閉定時器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轉(zhuǎn)換:255/5=實(AD)/輸出
if (getdata>127)
{
write_com(0x80+0x40);
temp=(getdata-127)*10/255*100;
write_data('+');
write_data(p[temp/100]);//輸出整數(shù)位
write_data('.'); //輸出小數(shù)點
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]);//輸出整數(shù)位
write_data('.'); //輸出小數(shù)點
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//定時器計數(shù)器0
{
CLK=~CLK;
}
|
|