这是我做的一个仿真电压表,但是却不能显示,
可能是扫描的问题哦,但不知道怎样修改,请高手帮忙看下!先谢啦源程序如下: 把仿真文件也贴上来了
#include <reg52.H>
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,0,0,0,0};
unsigned char dispcount;
unsigned char getdata;
unsigned int temp;
unsigned char i;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
void main(void)
{
ST=0;
OE=0;
ET0=1;
ET1=1;
EA=1;
TMOD=0x12; //T1为定时器,工作在方式1;T0为计数器,工作在方式2
TH0=216;
TL0=216;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ST=1;
ST=0; //开始转换
while(1)
{
if(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
temp=getdata*235; //这个地方是否正确??
temp=temp/128;
i=5;
dispbuf[0]=10;
dispbuf[1]=10;
dispbuf[2]=10;
dispbuf[3]=10;
dispbuf[4]=10;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
while(temp/10)
{
dispbuf=temp%10;
temp=temp/10;
i++;
}
dispbuf=temp;
ST=1;
ST=0;
}
}
}
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
if(dispcount==7)
{
P1=P1 | 0x80;
}
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
[ 本帖最后由 wscsyyych 于 2008-7-31 12:55 编辑 ]
电压表.rar
(2008-07-24 18:00:00, Size: 29.6 KB, Downloads: 4)

最新回复
panhearii (2008-7-24 17:13:40)
liaoguobao00 (2008-7-26 14:30:26)
1.jpg
#include <AT89X52.H>
unsigned char code dispbitcode[]={0xfd,0xfb,0xf7,0xef};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//延时1ms子程序
void delay1ms()
{
unsigned char a,b;
for(a=0;a<110;a++)
for (b=0;b<3;b++);
}
void main()
{
unsigned char temp1,temp2,temp3;
unsigned int getdata;
while(1)
{//下面这句的意思是 MOV DPTR,#0xFEF0; CLR A; MOVX @DPTR,A;启动A/D转换
*((unsigned char xdata*)0xfef0)=0;
if(P3_0==1)//判断是否转换完成
{
getdata=P0;//完成后读出转换后的数据
}
temp3=getdata*5/255; //整数部分
temp2=(getdata*5%255)*10/255; //小数点后第一位
temp1=((getdata*5%255)*10%255)*10/255;//小数点后第二位
if((((getdata*5%255)*10%255)*10%255)*10/255>=5)//四舍五入
{
temp1++;
if(temp1==10)
{
temp1=0;
temp2++;
if(temp2==10)
{
temp2=0;
temp3++;
}
}
}
///////////////////在数码管上显示出来**********************
P1=dispcode[temp3];
P2=dispbitcode[3];
delay1ms();
P1=0;
P1=0x40;
P2=dispbitcode[2];
delay1ms();
P1=0;
P1=dispcode[temp2];
P2=dispbitcode[1];
delay1ms();
P1=0;
P1=dispcode[temp1];
P2=dispbitcode[0];
delay1ms();
P1=0;
}
}
liuliya21c (2008-7-27 13:27:52)
wscsyyych (2008-7-31 12:53:40)
sunrain710 (2008-8-02 18:57:40)