久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1879|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

求助這個(gè)程序和仿真有什么錯(cuò)誤,運(yùn)行一會(huì)會(huì)后會(huì)報(bào)錯(cuò)還有顯示有問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
1.可控電源設(shè)計(jì)液晶屏能正常顯示功能實(shí)現(xiàn)
2.正確顯示電壓值、 DA能準(zhǔn)確輸出對(duì)應(yīng)電壓
3.能連續(xù)可調(diào)節(jié)0-12V的電壓并正常顯示
#include"reg52.h"                //包含頭文件

//宏定義
#define uchar unsigned char
#define uint unsigned int

//按鍵定義
sbit KEY1=P2^0;
sbit KEY2=P2^1;
sbit KEY3=P2^2;
sbit KEY4=P2^3;

//液晶控制引腳定義
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;

//DAC定義
sbit CS_5615=P1^5;          //定義選片信號(hào)IO口
sbit CLK_5615=P1^6;         //定義時(shí)鐘信號(hào)IO口
sbit DAT_5615=P1^7;         //定義數(shù)據(jù)輸入IO口

//ADC定義
sbit CS=P3^5;  //定義選片信號(hào)IO口
sbit CLK=P3^3; //定義時(shí)鐘信號(hào)IO口
sbit DIO=P3^4; //定義數(shù)據(jù)輸入IO口

//報(bào)警指示燈定義
sbit led=P3^1;

uint U;
uchar GETU=0;
bit flag=0;
uint a=0;

unsigned char Int,Dec;  //分別儲(chǔ)存轉(zhuǎn)換后的整數(shù)部分與小數(shù)部分
uchar code tab1[]={"Welcome to use  "};  //固定字符
uchar code tab2[]={"adj power supply"};  //固定字符
uchar code tab3[]={"Voltage:     . v"};  //固定字符
uchar code tab4[]={"                "};  //固定字符
uchar code tab5[]={"Short circuit!!!"};  //固定字符
uchar code tab6[]={"Please restart!!"};  //固定字符
//延時(shí)函數(shù)
void delay(uint xms)  //延時(shí)函數(shù),有參函數(shù)
{
    uint x,y;
    for(x=xms;x>0;x--)
     for(y=121;y>0;y--);
}

//液晶寫入指令函數(shù)
void write_1602com(uchar com)
{
    RS=0;  //數(shù)據(jù)/指令選擇置為指令
    RW=0;  //讀寫選擇置為寫
    P0=com;  //送入數(shù)據(jù)
    delay(1);
    EN=1;  //拉高使能端,為制造有效的下降沿做準(zhǔn)備
    delay(1);
    EN=0;  //en由高變低,產(chǎn)生下降沿,液品執(zhí)行命令
}

//液晶寫入數(shù)據(jù)函數(shù)
void write_1602dat(uchar dat)
{
    RS=1;  //數(shù)據(jù)/指令選擇置為數(shù)據(jù)
    RW=0;  //讀寫選擇置為寫
    P0=dat;  //送入數(shù)據(jù)
    delay(1);
    EN=1;  //en置高電平,為制造下降沿做準(zhǔn)備
    delay(1);
    EN=0;  //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
}

//液晶初始化函數(shù)
void lcd_init()
{
    uchar p;
    write_1602com(0x38);  //設(shè)置液晶工作模式,意思: 16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
    write_1602com(0x0c);  //開(kāi)顯示不顯示光標(biāo)
    write_1602com(0x06);  //整屏不移動(dòng),光標(biāo)自動(dòng)右移
    write_1602com(0x01);  //清顯示
        write_1602com(0x80);  //日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開(kāi)始顯示
    for(p=0;p<16;p++)
    {
            write_1602dat(tab1[p]);  //向液晶屏寫日歷顯示的固定符號(hào)部分
    }
        write_1602com(0xc0);  //時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開(kāi)始顯示
    for(p=0;p<16;p++)
        {
            write_1602dat(tab2[p]);  //寫顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào)
    }
    delay(1000);
    write_1602com(0x80);  //日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開(kāi)始顯示
    for(p=0;p<16;p++)
    {
        write_1602dat(tab3[p]);  //向液晶屏寫日歷顯示的固定符號(hào)部分
    }
        write_1602com(0xc0);  //時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開(kāi)始顯示
    for(p=0;p<16;p++)
    {
        write_1602dat(tab4[p]);  //寫顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào)
    }
}

//液晶顯示函數(shù)
void shuma(uint buf)
{
    uchar a,b,c,d,p;
    a=buf/1000;        //十位
    b=buf%1000/100; //個(gè)位
    c=buf%100/10;  //小數(shù)點(diǎn)后一位
        d=buf%10;  //小數(shù)點(diǎn)后兩位
    if(flag==0)
    {
        write_1602com(0x80+11);
        write_1602dat(a+0x30);
                write_1602dat(b+0x30);
        write_1602dat('.');
        write_1602dat(c+0x30);
    }
        if(flag==1)        //短路提示
        {
                    write_1602com(0x80);         //時(shí)間顯示固定符號(hào)寫入位置,從第二個(gè)位置后開(kāi)始顯示
                 for(p=0;p<16;p++)
                 {
                    write_1602dat(tab5[p]); //寫入時(shí)間固定符號(hào),兩個(gè)冒號(hào)
                 }
                    write_1602com(0xc0);         //時(shí)間顯示固定符號(hào)寫入位置,從第二個(gè)位置后開(kāi)始顯示
                 for(p=0;p<16;p++)
                 {
                    write_1602dat(tab6[p]); //寫入時(shí)間固定符號(hào),兩個(gè)冒號(hào)
                 }
        }
}

//DAC5615驅(qū)動(dòng)函數(shù)
void tlc_5615(uint buf)          //DA輸出
{
    uint a,c;         //定義變量
    c=buf;                 //要輸出的數(shù)據(jù)賦值
    CS_5615=0;         //引腳拉低
    for(a=16;a>0;a--)         //循環(huán)16次
    {
        DAT_5615=c>>15;         //把數(shù)據(jù)串行口輸入da芯片
        c=c<<1; //將數(shù)據(jù)左移一位,下次循環(huán)時(shí)就是傳輸?shù)诙粩?shù)據(jù)了
        CLK_5615=1;                //拉高
        CLK_5615=0;                //拉低
    }
    CLK_5615=1;
    CLK_5615=0;
    CLK_5615=1;
    CLK_5615=0;
    CS_5615=1;
}

//ADC驅(qū)動(dòng)函數(shù)
unsigned int A_D()
{
    unsigned char i, dat;
    CS=1;  //一個(gè)轉(zhuǎn)換周期開(kāi)始
    CLK=0;  //為第一個(gè)脈沖作準(zhǔn)備
    CS=0;  //CS置0,片選有效

        DIO=1;  //DI0置1,規(guī)定的起始信號(hào)
    CLK=1;  //第一個(gè)脈沖
    CLK=0;  //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
    DIO=1;  //DI0置1,通道選擇信號(hào)
    CLK=1;  //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選擇通道1
    CLK=0;  //第二個(gè)脈沖下降沿
    DIO=0;  //DI置0,選擇通道0
    CLK=1;  //第三個(gè)脈沖
    CLK=0;  //第三個(gè)脈沖下降沿
        DIO=1;  //第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
    CLK=1;        //第四個(gè)脈沖
        for(i=0;i<8;i++)  //高位在前
    {
        CLK=1;  //第四個(gè)詠沖
        CLK=0;
        dat<<=1;  //將下面儲(chǔ)存的低位數(shù)據(jù)向右移
        dat|=(unsigned char)DIO;  //將輸出數(shù)據(jù)DIO通過(guò)或運(yùn)算儲(chǔ)存在dat最低位
    }
    CS=1;  //片選無(wú)效
    return dat;  //將讀出的數(shù)據(jù)返回
}

//主函數(shù)
void main(void)
{
    U=0;   //電壓值顯示0
        lcd_init();
        while(1)  //進(jìn)入循環(huán)
        {
            tlc_5615(U);  //輸出電壓值
                shuma(U/8*10);  //顯示電壓值
                if(flag==0)           //沒(méi)有短路
                {
                  if(KEY1==0)        //按鍵1按下
                 {
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);//此處調(diào)用顯示函數(shù)就是延時(shí)去抖的作用
                        if(KEY1==0)         //再次判斷按鍵1按下
                        {
                            if(U<960) //1V 對(duì)應(yīng)的是80 10位ad
                                U=U+8;          //電壓加0.1V
                        }
                }
                if(KEY2==0)           //按鍵2按下
                {
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                        if(KEY2==0)
                        {
                            if(U>=8) //電壓減
                                U=U-8;
                        }
                }       
                if(KEY3==0)          //按鍵3按下
                {
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                        if(KEY3==0)
                        {
                                U=528;        //輸出6.6V電壓
                        }
                }
                if(KEY4==0)         //按鍵4按下
                {
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                   shuma(U/8*10);
                   if(KEY4==0)
                   {
                     U=0;           //關(guān)閉輸出
                         }
                }
        }
                GETU=A_D();                //讀取ad數(shù)據(jù)
                if(GETU>=12)  //0.0196V,采樣電阻采集到的電壓數(shù)據(jù)
                {
                   U=0;           //關(guān)閉輸出
                   led=0;
                   a=0;
                   flag=1; //短路標(biāo)志位
                 }               
        }
}

1.png (71.83 KB, 下載次數(shù): 74)

1.png

0.png (4.41 KB, 下載次數(shù): 96)

0.png

可控電源.zip

115.61 KB, 下載次數(shù): 4

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久中文字 | 二区在线视频 | 欧美精品久久久久 | 久久久久久久久久毛片 | 免费a国产 | 精品久久九九 | 中文字幕精品一区二区三区精品 | 欧美福利一区 | 日韩高清国产一区在线 | 波多野吉衣久久 | 成人性视频在线播放 | 美女久久久久久久久 | 久久99这里只有精品 | 精品在线观看一区 | 五月激情婷婷六月 | 婷婷国产一区 | 天天av综合 | 久草视频在线播放 | av毛片| 国产精品久久网 | 久久新视频| 97久久久久久久久 | 国产精品自产拍在线观看蜜 | 日韩黄| 欧美午夜一区二区三区免费大片 | 国产99热在线 | 丝袜美腿一区二区三区动态图 | 99热播精品| 国产高清精品在线 | 日韩中文电影 | 成人深夜福利 | 中文字幕在线视频观看 | 丝袜 亚洲 另类 欧美 综合 | 欧美一区二区三区 | 成人精品视频在线 | 国产一级一级毛片 | 中文字幕一区二区三 | 天天天天天天天干 | 黄色网址在线免费播放 | 国产日韩欧美中文 | 国产成人精品免费 |