版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、此程序分三部分,一是主程序,二是1602显示程序,三是ad0808采样程序,附protues仿真图。/*/*/*<程序名>:多路数字电压表采集/*<功能>:使用LCD1602显示被检测电压,精度为0.05V,范围是05V。/*<版本说明>:这是第3版,使用LCD显示。/*<作者>:程沛/*<修改>:杨坚/*<完成时间>:2011年11月18日/*/*头文件及宏定义#include "includes.h"#include <at89x51.h>#define TIME0H 0x3C#defi
2、ne TIME0L 0xB0/#define abc P1/*/全局变量* */*unsigned char uc_Clock=0;/定时器0中断计数bit b_DATransform=0;/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>
3、>>>>>>>>>>>>>>>>>>>>>>>>>>/把电压显示在LCD /<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>
4、>>>>>>>>>>>>>>>>>>>>>>>>>>>>void vShowVoltage(unsigned int uiNumber)unsigned char ucaNumber3,ucCount;if(uiNumber>999)uiNumber=999;ucaNumber0=uiNumber/100;/把计算数字的每个位存入数组。ucaNumber1=(uiNumber-100*(int)ucaNumber0)/10
5、;ucaNumber2=uiNumber-100*(int)ucaNumber0-10*ucaNumber1;for(ucCount=0;ucCount<3;ucCount+)vShowOneChar(ucaNumberucCount+48);/从首位到末位逐一输出。if(ucCount=0)vShowOneChar('.');1 / 9/*/*主函数/*void main() unsigned int m,g,k; unsigned char abc; / for(m=0;m<8;m+) / /<<<<<<<<<
6、;<<<<<<<<设置定时器0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TMOD=0x01;/定时器0,模式1。TH0=TIME0H;TL0=TIME0L;TR0=1;/启动定时器。ET0=1;/开定时器中断。EA=1;/开总
7、中断vdInitialize();vWriteCMD(0x84); /写入显示起始地址(第二行第一个位置)vShowChar("Voltage:");vWriteCMD(0xC9);vShowChar("(V)");while(1) abc = 0x00; for(m=0;m<8;m+) P1=abc; abc+;if(b_DATransform=1)b_DATransform=0; vWriteCMD(0x80); vShowVoltage(m);vWriteCMD(0xC4);vShowVoltage(uiADTransform();for(g
8、=0;g<1000;g+) for(k=0;k<120;k+); /<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
9、>>>>>>>>/<<<<<<<<<<<<<<定时器0中断函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/<<<<<<<<<&l
10、t;<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void Time0() interrupt 1if(uc_Cloc
11、k=0)uc_Clock=5;b_DATransform=1;elseuc_Clock-;TH0=TIME0H; /恢复定时器0。TL0=TIME0L;/*延时程序*/void adelay()/ unsigned int i,k;/ for(i=0;i<1000;i+)/ for(k=0;k<120;k+);/<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>&
12、gt;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<AD转换函数>>>>>&g
13、t;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>&
14、gt;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>#include <at89x51.h>#define START P3_4 /ATART,ALE接口。0->1->0:启动AD转换。#define EOC P3_3 /转换完毕由0变1.#define OUTPORT P2 /#define abc P1/AD转换函数,返回转换结果。/转换结果是3位数,小数点在百位与十位之间。
15、unsigned int uiADTransform()unsigned int uiResult;/ unsigned char abc;/for(m=0;m<8;m+) / abc=0x00;/P1=abc;START=1; /启动AD转换。START=0;while(EOC=0); /等待转换结束。uiResult=OUTPORT; /出入转换结果。uiResult=(100*uiResult)/51; /处理运算结果。 / abc+;return uiResult;/*/*驱动程序*/*/<<<<<<<<<<<&l
16、t;<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/<<<<<<<<<<<<<&
17、lt;<<<<<<<头文件及宏定义>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/<<<<<<<<<<<<<<<<<<<<<<<<<<>&
18、gt;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>#include "SMC1602.h"/<<<<<<<<<<<<<<<<<<&l
19、t;<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/<<<<<<<<<<<<<<<<<<&
20、lt;<<把1个命令写入LCD>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>&g
21、t;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void vWriteCMD(unsigned char ucCommand) vDelay();/先延时。LCDE=1;/然后把改为写入命令状态。LCDRS=0;LCDRW=0;LCDPORT=ucCommand;/再输出命令。LCDE=0;/最后执行命令。/<<
22、;<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/<&l
23、t;<<<<<<<<<<<<<<<<<<<<<<把1个数据写入LCD>>>>>>>>>>>>>>>>>>>>>>>>>>>/<<<<<<<<<<<<<<<<<<<>>>>
24、;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void vWriteData(unsigned char ucData) vDelay(); /先延时。LCDE=1; /然后把改为写入数据状态。LCDRS=1;LCDRW=0;LCDPORT=ucData; /再输出数据。LC
25、DE=0; /最后显示数据。void vShowOneChar(unsigned char ucChar)switch(ucChar)case ' ': vWriteData(0x20);break;case '!': vWriteData(0x21);break;case '"': vWriteData(0x22);break;case '#': vWriteData(0x23);break;case '$': vWriteData(0x24);break;case '%': vWrit
26、eData(0x25);break;case '&': vWriteData(0x26);break;case '>': vWriteData(0x27);break;case '(': vWriteData(0x28);break;case ')': vWriteData(0x29);break;case '*': vWriteData(0x20);break;case '+': vWriteData(0x2A);break;case '-': vWriteData(
27、0x2D);break;case '/': vWriteData(0x2F);break;case '=': vWriteData(0x3D);break;case '<': vWriteData(0x3E);break;case '?': vWriteData(0x3F);break;case '.': vWriteData(0x2E);break;case ':': vWriteData(0x3A);break;case '0': vWriteData(0x30);brea
28、k;case '1': vWriteData(0x31);break;case '2': vWriteData(0x32);break;case '3': vWriteData(0x33);break;case '4': vWriteData(0x34);break;case '5': vWriteData(0x35);break;case '6': vWriteData(0x36);break;case '7': vWriteData(0x37);break;case '8
29、': vWriteData(0x38);break;case '9': vWriteData(0x39);break;case 'A': vWriteData(0x41);break;case 'B': vWriteData(0x42);break;case 'C': vWriteData(0x43);break;case 'D': vWriteData(0x44);break;case 'E': vWriteData(0x45);break;case 'F': vWrite
30、Data(0x46);break;case 'G': vWriteData(0x47);break;case 'H': vWriteData(0x48);break;case 'I': vWriteData(0x49);break;case 'J': vWriteData(0x4A);break;case 'K': vWriteData(0x4B);break;case 'L': vWriteData(0x4C);break;case 'M': vWriteData(0x4D);br
31、eak;case 'N': vWriteData(0x4E);break;case 'O': vWriteData(0x4F);break;case 'P': vWriteData(0x50);break;case 'Q': vWriteData(0x51);break;case 'R': vWriteData(0x52);break;case 'S': vWriteData(0x53);break;case 'T': vWriteData(0x54);break;case '
32、;U': vWriteData(0x55);break;case 'V': vWriteData(0x56);break;case 'W': vWriteData(0x57);break;case 'X': vWriteData(0x58);break;case 'Y': vWriteData(0x59);break;case 'Z': vWriteData(0x5A);break;case 'a': vWriteData(0x61);break;case 'b': vWri
33、teData(0x62);break;case 'c': vWriteData(0x63);break;case 'd': vWriteData(0x64);break;case 'e': vWriteData(0x65);break;case 'f': vWriteData(0x66);break;case 'g': vWriteData(0x67);break;case 'h': vWriteData(0x68);break;case 'i': vWriteData(0x69);
34、break;case 'j': vWriteData(0x6A);break;case 'k': vWriteData(0x6B);break;case 'l': vWriteData(0x6C);break;case 'm': vWriteData(0x6D);break;case 'n': vWriteData(0x6E);break;case 'o': vWriteData(0x6F);break;case 'p': vWriteData(0x70);break;case
35、39;q': vWriteData(0x71);break;case 'r': vWriteData(0x72);break;case 's': vWriteData(0x73);break;case 't': vWriteData(0x74);break;case 'u': vWriteData(0x75);break;case 'v': vWriteData(0x76);break;case 'w': vWriteData(0x77);break;case 'x': vWriteData(0x78);break;case 'y': vWriteDat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年化工厂反应釜维护保养与检修安全规程
- 2026年电力中长期交易合同范本
- 胸腔积液患者的护理培训
- 电梯维保与用户安全保障协议
- 2026年鹅常见营养缺乏症防治技术总结
- 银发旅游老年旅游项目投资协议
- 脑梗患者营养护理指南
- 2026年新生儿护理常见问题与家庭应对指导
- 2026年教育培训机构活动安全预案
- 教学设备技术培训合作协议2026
- 筋膜刀的临床应用
- 高中数学必修 选修全部知识点归纳总结(新课标人教A版)
- 人力资源外包投标方案
- 江苏师范大学成人继续教育网络课程《英语》单元测试及参考答案
- 社会工作综合能力(初级)课件
- 国家职业技能鉴定考评员考试题库
- 成人癌性疼痛护理-中华护理学会团体标准2019
- 培训testlab中文手册modal impact1 Test Lab模态锤击法软件布局
- 安徽华塑股份有限公司年产 20 万吨固碱及烧碱深加工项目环境影响报告书
- 糖尿病酮症酸中毒指南精读
- 业财一体化财务对接解决方案
评论
0/150
提交评论