完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #include #include //*********宏定义方便使用******* #define uchar unsigned char #define uint unsigned int //*********定义变量区*********** ***it lcden = P2^0; //LCD使能信号 ***it lcdrs = P2^1; //LCD数据/命令选择信号 ***it INPUT1 = P2^2; //INPUT1检测口 ***it INPUT2 = P2^3; //INPUT2检测口 ***it INPUT3 = P2^4; //INPUT3检测口 ***it SDI = P1^3; ***it CONV = P1^2; ***it SCK = P1^1; ***it SDO = P1^0; uchar count,k; uchar code tab_1[]="Freq:" uchar tab_freq[]={0,0,0,0,0,0,0}; //频率数组 unsigned char voltage[16] = "voltage: 0.000V";//第二行电压显示 uint beishuo; //*********函数声明区*********** void int_time1(); //定时器0 void int_count0(); //计数器1 void trans_count(); //转换为10进制 unsigned int ltc1865_ch0(); //读LTC1865通道0的AD值 void disp_voltage(); //AD转换数据计算 void lcd_dis(); //lcd显示函数 void lcd_init(); //LCD初始化函数 void write_com(uchar); //写命令函数 void write_data(uchar); //写数据函数 void delay(uint); //延时函数 //*********主函数开始*********** void main() { TMOD= 0x11; //T0为计数模式:方式1?T1为定时模式:方式1 TH0=0;//T0计数初始值 TL0=0; TH1=0x4c; //T1定时初始值 TL1=0x00; //50MS EA=1; ET1=1; //允许T1定时中断??? ET0=1; //允许T0计数中断??? lcd_init(); write_com(1); while(1) { if(INPUT1==1) { beishuo=512; TR0=1; TR1=1;break; } if(INPUT2==1) { beishuo=16; TR0=1; TR1=1; break; } if(INPUT3==1) { beishuo=1; TR0=1; TR1=1; break; } } trans_count(); //读取频率值 disp_voltage(); //读取电压值 lcd_dis(); //显示电压和频率值 } //*********T0计数函数开始************** void int_count0() interrupt 1 { k++; } //*********T1定时中断函数开始*********** void int_time1() interrupt 3 { TH1=0x4c; TL1=0x00; //50MS count++; if(count>=20) { count=0; TR0=0; //到1秒T0停止计数????? TR1=0; //T1停止定时? } } //*********数据转换函数开始************** void trans_count() { unsigned long int z; z = k * 65536 + TH0 * 256 + TL0; //计算出一秒钟收到的脉冲数量 z = z * beishuo; //乘以分频倍数还原原始频率 if(z>10000000) //最大量程为999999 { z=9999999; } tab_freq[0]=z/1000000; //百万位 tab_freq[1]=(z-tab_freq[0]*1000000)/100000 //十万位 tab_freq[2]=(z-tab_freq[0]*1000000-tab_freq[1]*100000)/10000; //万位 tab_freq[3]=(z-tab_freq[0]*1000000-tab_freq[1]*100000-tab_freq[2]*10000)/1000; //千位 tab_freq[4]=(z-tab_freq[0]*1000000-tab_freq[1]*100000-tab_freq[2]*10000-tab_freq[3]*1000)%100; //百位; tab_freq[5]=(z-tab_freq[0]*1000000-tab_freq[1]*100000-tab_freq[2]*10000-tab_freq[3]*1000-tab_freq[4]*100)%10; //十位 tab_freq[6]=z-tab_freq[0]*1000000-tab_freq[1]*100000-tab_freq[2]*10000-tab_freq[3]*1000-tab_freq[4]*100-tab_freq[5]; //个位 } /*读LTC1865通道0的AD值*/ unsigned int ltc1865_ch0() { unsigned char i; unsigned int voltage; SDO = 1; SCK = 1; CONV = 0; for(i=0;i<16;i++) { SCK = 0; voltage<<=1; if(SDO==1) { voltage+=1; } SCK = 1; } CONV = 1; return(voltage); } /*AD转换数据计算*/ void disp_voltage() { unsigned long temp; temp=ltc1865_ch0(); temp=(temp*5000)/65535; temp=temp*2; //还原回原始电压 tab2[10]=0x30+temp/1000; tab2[12]=0x30+temp%1000/100; tab2[13]=0x30+temp%100/10; tab2[14]=0x30+temp%10; } //*********lcd显示函数开始****** void lcd_dis() { uchar i,t; for(i=0;i<5;i++) { write_data(tab_1); //显示"Freq:" } write_com(0x80+5); for(i=0;i<7;i++) { t=tab_freq; write_data(tab[t]); //显示频率值 } write_com(0x80+14); write_data('H'); write_data('z'); //显示Hz write_com(0x80+0x40); for(i=0;i<15;i++) { write_data(voltage); } } //*********LCD初始化函数开始**** void lcd_init() { dula=0; wela=0; // 关闭数码管显示 lcden=0; write_com(0x38); //设置显示模式:16X2,5X7,8位数据接口 write_com(0x0c); //开显示,显示光标,光标闪烁 write_com(0x06); //读写一个字符后,地址指针及光标加一,且 光标加一整屏显示不移动 write_com(0x80); //设置光标指针 } //*********写命令函数开始******* void write_com(uchar com) { lcdrs=0; //低电平写命令 P0=com; //写入命令 delay(3); //延时约3ms lcden=1; //LCD使能端置高电平 delay(5); //延时约5ms lcden=0; //LCD使能端拉低电平 } //*********写数据函数开始******* void write_data(uchar dat) { lcdrs=1; //低电平写数据 P0=dat; //写入命令 delay(3); //延时约3ms lcden=1; //LCD使能端置高电平 delay(5); //延时约5ms lcden=0; //LCD使能端拉低电平 } //*********延时函数开始********* void delay(uint k) { uint i,j; for(i=k;i>0;i--) for(j=110;j>0;j--); } |
|
相关推荐
1个回答
|
|
PIC的板块,看到个reg51.h,有些不懂了。。。
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2093 浏览 1 评论
3643 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2341 浏览 2 评论
2770 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4046 浏览 5 评论
993浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6375浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 23:24 , Processed in 0.692170 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号