收藏 分销(赏)

单片机制作的电压表程序.doc

上传人:仙人****88 文档编号:11233157 上传时间:2025-07-09 格式:DOC 页数:6 大小:32.50KB 下载积分:10 金币
下载 相关 举报
单片机制作的电压表程序.doc_第1页
第1页 / 共6页
单片机制作的电压表程序.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
单片机制作的电压表 #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sfr ADC_CONTR=0xBC; //A/D转换功能允许寄存器 sfr ADC_RES=0xBD;   //A/D转换结果寄存器 sfr ADC_RESL=0xBE; //A/D转换结果寄存器低 sfr AUXR1=0xA2; //辅助寄存器1 sfr P1_ASF=0x9D;    //A/D转换控制寄存器 sbit ADIO=P1^7;       //1.7口接测量电压 sbit U3_DS=P1^5; sbit U3_STCP=P1^4; sbit U3_SHCP=P1^3; sbit U4_DS=P1^2; sbit U4_STCP=P1^1; sbit U4_SHCP=P1^0; uchar key_val[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G'}; uchar code key_code[]={0x77,0x7B,0x7D,0x7E,0xB7,0xBB,0xBD,0xBE,0xD7,0xDB,0xDD,0xDE,0xE7,0xEB,0xED,0xEE}; uchar key,count; void delay(unsigned int n); //74HC595 void U3_595(unsigned char num)     {    unsigned char count1;    for (count1=0;count1<=7;count1++)        {        if ((num&0x80)==0x80)//最高位为1,则向SDATA_595发送1       {              U3_DS=1;     }              else      {              U3_DS=0;     }     U3_SHCP=0;     U3_SHCP=1;              num<<=1;//左移     } U3_STCP=0; U3_STCP=1; } void U4_595(unsigned char num)//发送指令到RS,RW,E(4,5,6位)     {    unsigned char count2;     for (count2=0;count2<=7;count2++)        {              if((num&0x80)==0x80)       {              U4_DS=1;     }              else     {              U4_DS=0;     }              U4_SHCP=0;     U4_SHCP=1;        num<<=1;      }     U4_STCP=0;     U4_STCP=1; } //LCD延时子程序 n=1时延时1ms void delay(unsigned int n)    {       unsigned char i;       for(;n>0;n--)       for(i=0;i<125;i++)          _nop_(); } //写指令到LCD void wcmd(unsigned char cmd) {     U4_595(0x0F); U3_595(cmd);     U4_595(0x4F); U4_595(0x0F); } //写要显示的数据到LCD void wdat(unsigned char dat) {     U4_595(0x1F);//低4位全为1屏蔽8段数码管    U3_595(dat); U4_595(0x5F); U4_595(0x1F); } //初始化LCD void init() {     wcmd(0x38);//设置8位总线双行显示,5*7点阵    delay(20); wcmd(0x0C);//开显示,开光标,不闪烁 delay(20); wcmd(0x06);//读写字符时地址加1 delay(20); wcmd(0x01);//清屏 delay(20); wcmd(0x82); } //键盘扫描子程序 uchar keyscan(void) {      unsigned char hang,lie,keycode; char i; P0=0xf0; hang=P0;     if((hang&0xf0)!=0xf0)           //有键按下?     {     delay(5);                   //去抖动       hang=P0;     if((hang&0xf0)!=0xf0)         //有键按下      {                    P0=0x0f;      lie=P0;      keycode=hang|lie;         //获得键码      for(i=15;i>=0;i--)        {        if(keycode==key_code[i]) //查找键码        {           key=i;           return(key);         }                     }                }            }         else    return (key); } void keydown()                     //判断按键按下和显示程序 {     P0=0xf0; if((P0&0xf0)!=0xf0)    {             while(P0!=0xf0)    keyscan();                  //获得键码         wcmd(0xCF);       //设置键值显示位置    wdat(key_val[16-key]);        } } void ADC_POWER_ON() //开ADC电源,第一次使用要打开内部模拟电源 { ADC_CONTR=0x80; delay(10); } void SET_P1ASF(unsigned char channel) //设置模拟功能口 {     unsigned char i,final=0x01; for(i=0;i<=channel;i++)     final<<=1; P1_ASF=final; } void SET_ADC_CHANNEL(unsigned char channel) //设置A/D转换通道 {      channel|=0xc0;      ADC_CONTR=channel; delay(100); } float GET_ADC_RESULT() {     unsigned char flag=0x10,temp=0x00;    ADC_RES=0x00; ADC_RESL=0x00; AUXR1=0x04;//设置10位AD ADC_CONTR|=0x08;//启动A/D转换 _nop_(); _nop_(); _nop_(); _nop_(); do {temp=flag&ADC_CONTR;} while (temp==0x00); ADC_CONTR=ADC_CONTR&0xc7; //清零ADC_FLAG ADC_START 位 return 256*ADC_RES+ADC_RESL; } void main() {    float v;    unsigned temp,temp1,temp2;    init();    ADC_POWER_ON();    while(1)      {      key=keyscan();         keydown();     if(16-key==1)   //量程5V     {                SET_P1ASF(6);         SET_ADC_CHANNEL(6);         v=GET_ADC_RESULT();         v=v*5/1024;         temp=v;         wcmd(0x82);delay(5000);         wdat(0x30+temp);         temp1=(v-temp)*10;         wdat(46);//小数点         wdat(0x30+temp1);         temp2=(v-temp)*100-temp1*10;         wdat(0x30+temp2);      wdat(86);//V      wdat(32);//空白        }    if(16-key==2) //量程5-20V    {                SET_P1ASF(6);         SET_ADC_CHANNEL(6);         v=GET_ADC_RESULT();         v=4*v*5/1024;      temp=v/10;         wcmd(0x82);delay(5000);      wdat(0x30+temp);      temp1=(int)v%10;      wdat(0x30+temp1);      wdat(46);//小数点         temp2=v*10;         wdat(0x30+temp2%10);      temp2=v*100;      wdat(0x30+temp2%10);      wdat(86);//V     }     if(16-key==3) //量程20-100V    {      SET_P1ASF(6);         SET_ADC_CHANNEL(6);         v=GET_ADC_RESULT();         v=19.8*5*v/1024;      temp=v/10;         wcmd(0x82);delay(5000);         wdat(0x30+temp);         temp1=v-temp*10;         wdat(0x30+temp1);      wdat(46);//小数点         temp2=v*10;         wdat(0x30+temp2%10);      temp2=v*100;      wdat(0x30+temp2%10);      wdat(86);//V     } } }   
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服