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

有人能帮我看下0808模数转化的问题吗?有原码

[复制链接]
admin 发表于 2012-9-2 08:37:42 | 显示全部楼层 |阅读模式

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

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

×
原码如下:
#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define N 5
//uchar code dispbitcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code dispbitcode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uint temp;
uchar getdata;
uchar temp_H;
uchar temp_M;
uchar temp_L;
sbit P17=P1^7;
//sbit ST=P3^0;
//sbit CLK=P3^1;
sbit ST=P0^6;
sbit CLK=P0^7;
sbit EOC=P3^2;
sbit OE=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
void inital()
{
TMOD=0x01;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
ET0=1;
EA=1;
TR0=1;
}

void intr()interrupt 1
{

TH0=(65536-200)/256;
TL0=(65536-200)%256;
CLK=~CLK;
}

void Delay(unsigned int i)
{
unsigned int j;
for(;i>1;i--)
{
for(j=0;j<125;j++);
{;}
}
}
void display()
{
P34=1;
P35=0;
P36=0;
P1=dispbitcode[temp_H];
P17=0;
P34=1;
P35=0;
P36=0;
Delay(10);
P1=0xff;

P1=dispbitcode[temp_M];
P34=0;
P35=1;
P36=0;
Delay(N);
P1=0xff;
P1=dispbitcode[temp_L];
P34=0;
P35=0;
P36=1;
Delay(N);
P1=0xff;
}
//上面的是电表的相关设置;可用的
void init_serialcom( void )
{
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
//UART为模式1,8位数据,允许接收
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
//定时器1为模式2,8位自动重装
PCON |= 0x80 ;
//SMOD=1;
TH1 = 0xFD ; //Baud:9600 fosc="11".0592MHz
//IE |= 0x90 ; //Enable Serial Interrupt //这句加上就数字表就不显示了,中断会有影响吗???
TR1 = 1 ; // timer 1 run
TI=1;
}
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF= ch; //加1
while (TI== 0);
TI= 0 ;
}

//将所采集到量化好的数字发到COM口
void send_data_com()
{
int i;
//reset();
//unsigned char TEMP[]={'0','1','2','3','4','5','6','7','8','9','.','\n','V'};
unsigned char TEMP[5];

//temp=getdata*1.0/255*500;
TEMP[0]=temp/100%10+'0';
TEMP[1]=temp/10%10+'0';
TEMP[2]=temp%10+'0';
TEMP[3]=0x0d;// 回车
TEMP[4]=0x0a;// 换行
for(i=0;i<5;i++)
send_char_com(TEMP[i]);
//send_char_com('2');
}
void reset()
{ ST=0;
OE=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P2;
OE=0;
}
void show()
{
reset();
temp=getdata*1.0/255*500;
temp_H=temp/100;
temp_M=temp/10%10;
temp_L=temp%10;
display();
}
void main()
{
inital();
P2=0xff;
init_serialcom();
while(1)
{
show();
send_data_com();
}
}
作用是将采到电压值转成数字,分别发到COM口和以数码管的形式显示出来,现在数码管这块是OK的,COM这块一直显示的为字母,不知是不是波特率的问题,请大侠们看下
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-11-24 12:12 , Processed in 0.050674 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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