找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

C高手请进!!

[复制链接]
admin 发表于 2012-9-3 02:51:57 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
下面这个程序有什么不对吗(问题:通道能显示数据,但转换的后三位数据看不到...)
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit st=P3^2;
sbit oe=P3^1;
sbit eoc=P3^0;
sbit P0_7=P0^7;
sbit P3_5=P3^5;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示段码
uchar code td[]={0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f};//通道选择数组
uint ad_0809,ad_data1,ad_data2,ad_data3,ad_data0;
uchar m,number;
uchar x[8];//八通道数据待存数组
void delaynms(uint x);//nms延时程序
void display();//显示程序
void ad0809();//芯片启动程序
void key();//键扫描程序
main()
{
number=1;
P1=0x00;
while(1)
{
ad0809();//调AD0809启动子程序
key();//调按键子程序
ad_0809=x[number];//把相关通道数据给ad_0809
display();//调显示
}
}
/*******************************************/
/*nms延时程序*/
/*******************************************/
void delaynms(uint x)
{
uchar i;
while(x-->0)
{
for(i=0;i<125;i++)
{;}
}
}
/******************************************/
/*显示程序*/
/******************************************/
void display()
{
uchar a;
ad_data1=(ad_0809*49/25)/100;//读得的数据乘以2再乘以98%除以100得百位
ad_data2=((ad_0809*49/25)%100)/10;//读得的数据乘以2再乘以98%再分出十位
ad_data3=(((ad_0809*49/25)%100)%10);//读得的数据乘以2再乘以98%再分出个位
for(a=0;a<10;a++)
{
P0=tab[ad_data3];//送小数点后第二位显示
P2=0x07;//选通第一个数码管
delaynms(3);

P0=tab[ad_data2];//送小数点后第一位显示
P2=0x0b;//选通第二个数码管
delaynms(3);

P0=tab[ad_data1];//送整数显示
P0_7=0;//点亮第三个数码管小数点
P2=0x0d;// 选通第三个数码管
delaynms(3);

P0=tab[number];//送通道号显示
P2=0x0e;
delaynms(3);
}
}
/********************************************/
/*AD0809启动子程序*/
/********************************************/

void ad0809()
{ uchar i,m=1;
for(i=0;i<8;i++)
{
P2=td[i];//选通通道
oe=0;//以下三条指令为起动AD0809
delaynms(1);
st=0;
delaynms(1);
st=1;
delaynms(1);
st=0;
while(!eoc);//等待转换结束
oe=1;//取出读得的数据
x[m]=P1;//送相关通道数组
//oe=0;
m++;

}
}
/*******************************************/
/*键扫描程序*/
/*******************************************/
void key()
{
if(!P3_5)//P3.5是否按下
{
delaynms(20);//延时判误
if(!P3_5)//再一次判断P3。5是否按下
{
while(!P3_5);//等待P3。5为高电平
number++;//通道号显示加一
if(number>8)number=1;//八通道
}
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-23 23:01 , Processed in 0.053349 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表