STC12C5A60S2-AD转换12864显示示例程序

上传人:时间****91 文档编号:127913957 上传时间:2022-07-31 格式:DOC 页数:155 大小:29.50KB
收藏 版权申诉 举报 下载
STC12C5A60S2-AD转换12864显示示例程序_第1页
第1页 / 共155页
STC12C5A60S2-AD转换12864显示示例程序_第2页
第2页 / 共155页
STC12C5A60S2-AD转换12864显示示例程序_第3页
第3页 / 共155页
资源描述:

《STC12C5A60S2-AD转换12864显示示例程序》由会员分享,可在线阅读,更多相关《STC12C5A60S2-AD转换12864显示示例程序(155页珍藏版)》请在装配图网上搜索。

1、#include #define uint unsigned int #define uchar unsigned char sbit CS=P20; /LCD12864串行通信片选 sbit SID=P21; /LCD12864串行通信数据口 sbit SCLK=P22; /LCD12864串行通信同步时钟信号 sbit PSB=P25; /LCD12864并/串选择:H并行 L串行 unsigned int temp1,sh1,ge1,n1,m1; unsigned char ad_result_data10; /AD转换高八位 unsigned char ad_result_low210

2、; /AD转换低八位 unsigned char ad_result_total10; /AD转换总十位 unsigned char ad_average_result; /AD转换十次的平均值 unsigned char Ain,Vin; unsigned char b,t,R; char tp=0; unsigned char code ma16=0xb5,0xe7,0xd1,0xb9,0xa1,0xc3; /电压: unsigned char code ma2=.; uchar code disp1=提示: 按1 键进入; uchar code disp2=功能选择界面. ; unsig

3、ned char code num0=0xa3,0xb0; unsigned char code num1=0xa3,0xb1; unsigned char code num2=0xa3,0xb2; unsigned char code num3=0xa3,0xb3; unsigned char code num4=0xa3,0xb4; unsigned char code num5=0xa3,0xb5; unsigned char code num6=0xa3,0xb6; unsigned char code num7=0xa3,0xb7; unsigned char code num8=0

4、xa3,0xb8; unsigned char code num9=0xa3,0xb9; /-模块延时程序- 1ms void delay1ms(uint delay1ms) /STC11F60XE,22.1184M,延时1ms uint i,j; for(;delay1ms0;delay1ms-) for(i=0;i7;i+) for(j=0;j0;delay-) for(i=0;i124;i+); for(j=0;j124;j+); /* AD转换程序 */ void AD_initiate() /初始化函数 ES=0; TMOD=0x21; /定时计数器方式控制寄存器,自动重装,16位计

5、数器. SCON=0x50; /串行控制寄存器,方便在串口助手那观察 TH1=0xfa; TL1=0xfa; TR1=1; void ADC_Power_On() /AD转换电 ADC_CONTR|=0x80; delay(5); /必要的延时 void get_ad_result() /取AD结果函数,它是十位AD转换,每十次平均,最后取低八位作为AD采样数据 uint i,q=0; for(i=0;i4; /-电压采样程序- void caiyangP10() /测电压 P1M0|=0x01; /设P1_0为开漏模式 如: P1_0= #00000000B P1M1|=0x01; ADC_

6、CONTR=0xe0; /设置P1.0为输入AD转换口 delay(2); get_ad_result(); /取转换数据 Vin=ad_average_result; R=Vin; /*-写控制字到LCD12864-*/ void write_cmd(uchar cmd) uchar i; uchar i_data; i_data=0xf8; /命令控制字:11111000写指令 11111010写数据 11111100读状态 11111110读数据 CS=1; /片选置高,才能进行读写操作 SCLK=0; /*-写命令控制字-*/ for(i=0;i8;i+) /循环八次,每次读取一位数据

7、 SID=(bit)(i_data&0x80); /bit表示取其最高位 SCLK=0; SCLK=1; /正跳变写入指令 i_data=i_data1; /左移一位 /*-*/ /*-写指令高四位-*/ i_data=cmd; i_data=i_data&0xf0; /把低四位置0 for(i=0;i8;i+) /循环八次,每次读取一位数据 SID=(bit)(i_data&0x80); /bit表示取其最高位 SCLK=0; SCLK=1; /正跳变写入指令 i_data=i_data1; /左移一位 /*-*/ /*-写指令低四位-*/ i_data=cmd; i_data=i_data

8、4; /左移四位,把低四位的数据移到高四位,再把低四位置0 for(i=0;i8;i+) /循环八次,每次读取一位数据 SID=(bit)(i_data&0x80); /bit表示取其最高位 SCLK=0; SCLK=1; /正跳变写入指令 i_data=i_data1; /左移一位 /*-*/ CS=0; /把片选置低 delay1ms(5); /延时是因为没有进行忙检测,适当的延时可以不进行忙检测 /*-*/ /*-写数据到LCD12864-*/ void write_dat(uchar dat) uchar i; uchar i_data; i_data=0xfa; CS=1; for(

9、i=0;i8;i+) SID=(bit)(i_data&0x80); SCLK=0; SCLK=1; i_data=i_data1; i_data=dat; i_data=i_data&0xf0; for(i=0;i8;i+) SID=(bit)(i_data&0x80); SCLK=0; SCLK=1; i_data=i_data1; i_data=dat; i_data=i_data4; for(i=0;i8;i+) SID=(bit)(i_data&0x80); SCLK=0; SCLK=1; i_data=i_data1; CS=0; delay1ms(5); /*-*/ /*-显示坐

10、标-*/ void lcd_pos(uchar x,uchar y) /汉字显示坐标,x为哪一行,y为哪一列 uchar pos; if(x=0) x=0x80; /第一行 else if(x=1) x=0x90; /第二行 else if(x=2) x=0x88; /第三行 else if(x=3) x=0x98; /第四行 pos=x+y; /显示哪一行(总共有4行)哪一竖(总共有8竖,每16列为1竖) write_cmd(pos); /*-*/ /*-显示8个汉字-*/ void disp_hanzi(uchar code *chn) uchar i; write_cmd(0x30);

11、/基本指令操作方式 for(i=0;i16;i+) /16列*8个汉字=128(刚好) write_dat(chni); /*-*/ /*-显示数字-*/ void disp_num(uchar code *chn) uchar i; write_cmd(0x30); /基本指令操作方式 for(i=0;i2;i+) /1个数字 write_dat(chni); void disp_number(uchar num) switch(num) case 0: disp_num(num0);break; case 1: disp_num(num1);break; case 2: disp_num(

12、num2);break; case 3: disp_num(num3);break; case 4: disp_num(num4);break; case 5: disp_num(num5);break; case 6: disp_num(num6);break; case 7: disp_num(num7);break; case 8: disp_num(num8);break; case 9: disp_num(num9);break; default: break; /*- -LCD初始化-*/ void lcd_init() PSB=0; write_cmd(0x30); /基本指令

13、write_cmd(0x02); /地址归位 write_cmd(0x06); /游标右移 write_cmd(0x0c); /整体显示 write_cmd(0x01); /清屏 /*-*/ void displayP10() float ad1; /unsigned int temp1,sh1,ge1,n1,m1; /uchar code dis2=0x01,0x02,0x00; /ad1=x*7.8125; /电压修正 uchar i; ad1=Vin*3.9608; /具体线性参数由输入电压值调整,该值的测量范围为0-10.00V,5V左右的测量比较准确, /两端的最大误差为70mv,其

14、他一般在40mv以内 temp1=(int)ad1; sh1=temp1/1000; /十位 ge1=(temp1%1000)/100; /个位 n1=(temp1%1000)%100)/10; /小数点后一位 m1=(temp1%1000)%100)%10; /小数点后二位 /write_cmd(0x01); write_cmd(0x30); /基本指令操作方式 lcd_pos(0,0); for(i=0;i6;i+) write_dat(ma1i); lcd_pos(0,3); disp_number(sh1); lcd_pos(0,4); disp_number(ge1); lcd_po

15、s(0,5); for(i=0;i2;i+) write_dat(ma2i); lcd_pos(0,6); disp_number(n1); lcd_pos(0,7); disp_number(m1); /*lcd_pos(2,0); disp_hanzi(disp1); lcd_pos(3,0); disp_hanzi(disp2);*/ void main() EA=1; AD_initiate(); /初始化 ADC_Power_On(); /开AD电源 /init(); lcd_init(); delay(10); while(1) caiyangP10(); /测电压 send_ad_result(); /Vin=Vin*4007; displayP10(); delay(10); 参考链接:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!