完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本程序的主要用途是利用上位机显示AD0804转换后的电压值,利用上位机发送1,就会每个一秒的时间在上位机上显示电压值,当发送2时,退出显示电压值,一旦发送除这两个字以外的数字,就会出现ERROR的字眼字样,,但是我在调试的过程发现有一个问题,就是无论我在上位机上面对单片机发送什么数据,包括1和2,都会显示ERROR的字眼,找了很久也找不到原因在哪里,所以发上论坛,大家谈论一下,,问题究竟在哪里~??当然啦,数码管也是显示全部000000.。。。
#include #include #include #define uchar unsigned char #define uint unsigned int ***it seg04=P2^3; ***it seg03=P2^2; ***it seg02=P2^1; ***it seg01=P2^0; ***it adcwr=P3^6; ***it adcrd=P3^7; uint t0_num,a; uchar flag_time,flag_uart,flag_on; uint A1,A2,A3,A4; float adcunm2; long adcunm3,adcunm,ad_val,ad_vo; uchar code table1[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f }; uchar code table2[]={ 0xBf,0x86,0xDb,0xCf, 0xE6,0xEd,0xFd,0x87, 0xFf,0xEf }; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void init() { TMOD=0x21; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0xfd; TH1=0xfd; TR1=1; ET0=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; } void display(long adcunm13) { A1=adcunm13/1000; A2=adcunm13%1000/100; A3=adcunm13%100/10; A4=adcunm13%10; P0=0xff; seg01=0; seg02=1; seg03=1; seg04=1; P0=table2[A1]; delayms(5); seg01=1; P0=0xff; seg02=0; seg03=1; seg04=1; P0=table1[A2]; delayms(5); seg01=1; seg02=1; P0=0xff; seg03=0; seg04=1; P0=table1[A3]; delayms(3); seg01=1; seg02=1; P0=0xff; seg03=1; seg04=0; P0=table1[A4]; delayms(3); } long start() { adcwr=1; _nop_(); adcwr=0; _nop_(); adcwr=1; _nop_(); _nop_(); _nop_(); P1=0xff; adcrd=1; _nop_(); adcrd=0; _nop_(); adcunm=P1; adcrd=1; adcunm2=adcunm*(5.0000/256); adcunm3=adcunm2*1000; return adcunm3; } void main() {init(); while (1) { if (flag_uart==1) { flag_uart=0; ES=0; TI=1; switch (flag_on) { case 0: puts("Turn on adn"); TR0=1; break; case 1: printf("Turn off adn"); TR0=0; break; case 2: puts("Error"); break; } while (!TI); TI=0; ES=1; } if (flag_time==1) { flag_time=0; ad_val=start(); //ad_vo=(float)adcunm*5.0000/256.0; ES=0; TI=1; printf("the voltage is %lVn",ad_val); while (!TI); TI=0; ES=1; } display(ad_val); } } void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0_num++; if(t0_num==20) { t0_num=0; flag_time=1; } } void ser() interrupt 4 { RI=0; a=SBUF; flag_uart=1; if(a==1) flag_on=0; else if(a==2) flag_on=1; else flag_on=2; } |
|
相关推荐
4个回答
|
|
init里面写错了,写了2个TH1
|
|
|
|
|
|
|
|
看下你发的1、2、3是不是错发成了ASCII码
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式-ELFBOARD 解决PCB布线时无法捕捉到焊盘中心的问题
715 浏览 0 评论
Openharmony软件评估指南-米尔瑞芯微RK3568开发板
970 浏览 0 评论
STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压
1148 浏览 0 评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】开发板简介与上电测试
1150 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之传参
650 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11064 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-13 05:18 , Processed in 0.608503 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号