永发信息网

程序如下,高手帮忙看看,是通过温度传感器获取数据然后通过单片机输出到PC上面

答案:2  悬赏:10  手机版
解决时间 2021-12-21 21:38
  • 提问者网友:嗝是迷路的屁
  • 2021-12-21 06:26
单片机集成了AD转换器
#define UINT8 unsigned char
UINT8 temp()
{
UINT8 temp;
temp=ZSYS_ADC_GET(0);//获取温度值,已经经过AD转换了
return temp;
}
main()
{
UINT8 temp1;
temp1=temp();
ZHAL_LCD_DIS_STRING(0,3,&temp1,4,0);//LCD显示
zPrintf(1,"\n%02x",temp1);//输出到PC
}
下面解释下函数的意思:
ZHAL_LCD_DIS_STRING(0,3,&temp1,4,0);//0和3是LCD的横纵向的地址,4是输出宽度,0就忽略不讲了,默认的。这个函数原型是ZHAL_LCD_DIS_STRING(x,y,*p,w,0);
zPrintf(1,"\n%02x",temp1);//1代表通过异步串口UART1输出,引号里的为输出格式
ZSYS_ADC_GET(0);//这是API中通过通道ACH0获得模数转换器的值的函数
我的问题是:
1.输出格式符是%02x呢还是%u呢,貌似我运行了,都不是我理想中的结果啊。
2.LCD显示始终是乱码。怎么回事?希望高手帮忙
最佳答案
  • 五星知识达人网友:有你哪都是故乡
  • 2021-12-21 07:04
我没有你要的答案,随便写点。
(1)函数temp()跟ZSYS_ADC_GET(0)没有什么不同,因为你只是赋了值。
所以,temp1=temp();可用temp1=ZSYS_ADC_GET(0);代替,省去一个函数。少个函数,在检查故障时就更容易。
(2)主函数没有“初始化”代码。也不知你用的是什么单片机或者什么操作系统。应考虑是否对LCD进行初始化操作。与 PC通讯是使用的什么连接?USB?串口?是否也要对通讯协议进行定义或者初始化?
(3)如果你的程序不是运行于单片机系统的操作系统上,main()函数中应该有主循环
while(1){;}
不然就会乱。
(4)也许,你再多提供点信息,网友回答就来得更快。
全部回答
  • 1楼网友:毛毛
  • 2021-12-21 07:45

一块温度传感器ds18b20和一块单片机就行了(欢迎提问)

#include<reg52.h> #define uchar unsigned char #define uint  unsigned int

#define jump_rom 0xcc #define start 0x44 #define read_eerom 0xbe

sbit dq = p2^3;    //ds18b20数据口

unsigned char tmph,tmpl;

sbit e=p2^7;  //1602使能引脚 sbit rw=p2^6;  //1602读写引脚  sbit rs=p2^5;  //1602数据/命令选择引脚

void delay_1() {  int i,j;  for(i=0; i<=10; i++)  for(j=0; j<=2; j++) ; }

void enable(uchar del) {  p0 = del;  rs = 0;  rw = 0;  e = 0;  delay_1();  e = 1;  delay_1(); }

void write(uchar del) {  p0 = del;  rs = 1;  rw = 0;  e = 0;  delay_1();  e = 1;  delay_1(); }

void l1602_init(void) {  enable(0x01);  enable(0x38);  enable(0x0c);  enable(0x06);  enable(0xd0); }

void l1602_char(uchar hang,uchar lie,char sign) {  uchar a;  if(hang == 1) a = 0x80;  if(hang == 2) a = 0xc0;  a = a + lie - 1;  enable(a);  write(sign); }

void l1602_string(uchar hang,uchar lie,uchar *p) {  uchar a;  if(hang == 1) a = 0x80;  if(hang == 2) a = 0xc0;  a = a + lie - 1;  enable(a);  while(1)  {   if(*p == '\0') break;   write(*p);   p++;  } }

void delay(uint n) {  int i;  for(i=0; i<n; i++)  ; }

uchar reset(void) {  uchar deceive_ready;  dq = 0;  delay(29);  dq = 1;  delay(3);  deceive_ready = dq;  delay(25);  return(deceive_ready); }

uchar read_bit(void) {  uchar i;  dq = 0;  dq = 1;  for(i=0; i<3; i++);  return(dq); }

void write_bit(uchar bitval) { dq=0;if(bitval==1) dq=1; delay(5); dq=1; }

uchar read_byte(void) {  uchar i,m,receive_data;  m = 1;  receive_data = 0;  for(i=0; i<8; i++)  {   if(read_bit())   {    receive_data = receive_data + (m << i);   }   delay(6);  }  return(receive_data); }

void write_byte(uchar val) {  uchar i,temp;  for(i=0; i<8; i++)  {   temp = val >> i;   temp = temp & 0x01;   write_bit(temp);   delay(5);  } }

void main() {  float tt;  uint temp;  p2 = 0x00;  l1602_init();  l1602_string(1,1,"  ds18b20 test  ");  l1602_string(2,1,"temperature:00`c");  while(1)  {   reset();   write_byte(jump_rom);   write_byte(start);   reset();   write_byte(jump_rom);   write_byte(read_eerom);   tmpl = read_byte();   tmph = read_byte();   temp = tmph;   temp <<= 8;       temp = temp | tmpl;   tt = tmpl * 0.0625;   temp = tmpl / 16 + tmph * 16;   l1602_char(2,13,temp/10%10 + 48);   l1602_char(2,14,temp%10 + 48);   } }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯