完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是程序,网上有数字电压表用LCD1602显示的,怎么改成四位数码管显示不对了
附件有原理图protues画的,我qq982587241@qq.com #include #include /*********************************端口定义**********************************/ ***it CS = P3^4; ***it Clk = P1^0; ***it DI = P1^1; ***it DO = P1^1; /*******************************定义全局变量********************************/ unsigned char dat = 0x00; //AD值 unsigned char count = 0x00; //定时器计数 unsigned char CH; //通道变量 unsigned char dis[] = {0x00, 0x00, 0x00,0x00}; //显示数值 /*******************************共阳LED段码表*******************************/ unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /**************************************************************************** 函数功能:AD转换子程序 入口参数:CH 出口参数:dat ****************************************************************************/ unsigned char adc0832(unsigned char CH) { unsigned char i,test,adval; adval = 0x00; test = 0x00; Clk = 0; //初始化 DI = 1; _nop_(); CS = 0; _nop_(); Clk = 1; _nop_(); if ( CH == 0x00 ) //通道选择 { Clk = 0; DI = 1; //通道0的第一位 _nop_(); Clk = 1; _nop_(); Clk = 0; DI = 0; //通道0的第二位 _nop_(); Clk = 1; _nop_(); } else { Clk = 0; DI = 1; //通道1的第一位 _nop_(); Clk = 1; _nop_(); Clk = 0; DI = 1; //通道1的第二位 _nop_(); Clk = 1; _nop_(); } Clk = 0; DI = 1; for( i = 0;i < 8;i++ ) //读取前8位的值 { _nop_(); adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DO) adval |= 0x01; else adval |= 0x00; } for (i = 0; i < 8; i++) //读取后8位的值 { test >>= 1; if (DO) test |= 0x80; else test |= 0x00; _nop_(); Clk = 1; _nop_(); Clk = 0; } if (adval == test) //比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉 dat = test; _nop_(); CS = 1; //释放ADC0832 DO = 1; Clk = 1; return dat; } /**************************************************************************** 函数功能:延时子程序 入口参数: 出口参数: ****************************************************************************/ void delay(void) { int k; for(k=0;k<500;k++); } /**************************************************************************** 函数功能:将0-255级换算成0.00-5.00的电压数值 入口参数:i 出口参数: ****************************************************************************/ void convdata(unsigned char i) { dis[0] = i/51; //个位 dis[1] = (i%51)*10/51; //小数点后第一位 dis[2] = ((i%51)*10%51)*10/51; //小数点后第二位 } /**************************************************************************** 函数功能:数码管显示子程序 入口参数: 出口参数: ****************************************************************************/ void display(void) { /* P2=0xff; // 1111 1111 P0=tab[dis[0]] & 0x7f; //显示个位和小数点 P2=0xfe; //1111 1110 delay(); P2=0xff; P0=tab[dis[1]]; //显示小数点后第一位 P2=0xfd; //1111 1101 delay(); P2=0xff; P0=tab[dis[2]]; //显示小数点后第二位 P2=0xfb; //1111 1011 delay(); P2=0xff; P0=tab[dis[3]]; P2=0xf7; //1111 0111 delay();*/ P2=0xff; P0=0x99; } /**************************************************************************** 函数功能:定时器中断延时程序 这一段的作用时隔一段时间抽样一次 否侧显示的最后一位会不稳定 入口参数: 出口参数: ****************************************************************************/ void timer0(void) interrupt 1 { TMOD = 0x01; TH0 = 0x00; TL0 = 0x00; IE = 0x82; TR0 = 01; count++; if (count == 0x0A) { count = 0x00; dat = adc0832(CH); } } /**************************************************************************** 函数功能:主程序 入口参数: 出口参数: ****************************************************************************/ void main(void) { P2=0xff; //端口初始化 P0=0xff; /* CH = 0x00; //在这里选择通道 0x00或0x01 TMOD = 0x01; //设置中断 TH0 = 0x00; TL0 = 0x00; IE = 0x82; TR0 = 01; */ while(1) //主循环 { //convdata(dat); //数据转换 display(); //显示数值 } }
|
|
相关推荐
3个回答
|
|
单片机高手啊
|
|
|
|
{:12:}{:12:}{:12:}
|
|
|
|
止痛 大在在在大在
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 15:21 , Processed in 0.603034 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号