|
5SPN95V$CTOMH@DH~7G9I3S.png (56.45 KB, 下載次數(shù): 42)
下載附件
2022-4-3 22:59 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- void delay(uchar ms); //延時(shí)函數(shù)
- void wr_com(unsigned char com); //寫入指令數(shù)據(jù)到LCD
- void wr_dat(unsigned char dat); //寫入字符顯示數(shù)據(jù)到LCD
- void xianshi(uchar dizhi, uchar suzi); //單獨(dú)寫數(shù)到液晶函數(shù) ( 地址 數(shù)據(jù) )
- //uchar TLC549_ADC(void); //TLC549模數(shù)轉(zhuǎn)換
- //uchar get_cur(void);
- void uart_init(); //串口初始化函數(shù)
- sbit rs = P2^0;
- sbit rw = P2^1;
- sbit e = P2^2;
- sbit DI = P1^0;
- sbit CS = P1^1;
- sbit CLK = P1^2;
- uchar ad_0;
- uint AD;
- ////-------------------------------------
- //// 主函數(shù)
- ////-------------------------------------
- //void main()
- //{
- // uart_init();
- // wr_com(0x01); //顯示清屏
- // wr_com(0x38); //顯示模式設(shè)置
- // wr_com(0x0c); //光標(biāo)設(shè)置
- // while(1)
- // {
- // delay(100);
- // ad_0=TLC549_ADC();
- // AD=ad_0*1.97
- // xianshi(0x80+2,'A');
- // xianshi(0x80+3,'=');
- // xianshi(0x80+5,0x30+AD%1000/100);
- // xianshi(0x80+6,'.');
- // xianshi(0x80+7,0x30+AD%100/10);
- // xianshi(0x80+8,0x30+AD%10);
- // xianshi(0x80+9,'A');
- // }
- //}
- //----------------------------------
- // 延時(shí)子程序
- //----------------------------------
- void delay(uchar ms)
- {
- uchar i ;
- while(ms--)
- {
- for(i = 0 ; i<250;i++) ;
- }
- }
- //-------------------------------------
- // 寫入指令數(shù)據(jù)到LCD
- //-------------------------------------
- void wr_com(unsigned char com)
- {
- rs = 0 ;
- rw = 0 ;
- e = 0 ;
- P0 = com ; //P0=D0-D7
- delay(1);
- e = 1 ;//清屏 上升沿寫入命令
- delay(1);
- e = 0 ;
- }
-
- //-------------------------------------------------
- // 寫入字符顯示數(shù)據(jù)到LCD
- //--------------------------------------------------
- void wr_dat(unsigned char dat)
- {
- rs = 1 ;
- rw = 0 ;
- e = 0 ;
- P0 = dat ;
- delay(1);
- e = 1 ; //E上升沿寫入數(shù)據(jù)
- delay(1);
- e = 0 ;
- }
- //------------------------------------------------------
- // 單獨(dú)寫數(shù)到液晶函數(shù) ( 地址 數(shù)據(jù) )
- //------------------------------------------------------
- void xianshi(uchar dizhi, uchar suzi)
- {
- wr_com(dizhi);
- wr_dat(suzi);
- }
- //-----------------------------------------
- // TLC549模數(shù)轉(zhuǎn)換
- //-----------------------------------------
- uchar TLC549_ADC(uchar ain)
- {
- uchar n, tmp;
- CS = 1; //CS置高,片選無效
- CLK = 0;
- CS = 0; //CS置低,片選有效,同時(shí)DO輸出高位
- _nop_();
- _nop_(); //適當(dāng)延遲時(shí)間1.4us Setup Time
- for(n = 0; n < 8; n++) //串行數(shù)據(jù)移位輸入
- {
- tmp <<= 1;//每個(gè)高電平時(shí)鐘讀取1個(gè)bit,8個(gè)時(shí)鐘可以讀取1個(gè)byte的轉(zhuǎn)換結(jié)果,數(shù)據(jù)高位先讀取
- tmp |= DI;//程序中用八次循環(huán),可以讀出一個(gè)字節(jié)的轉(zhuǎn)換結(jié)果
- CLK = 1; //0.4us
- _nop_(); //延遲0.1us
- CLK = 0; //0.4us
- }
- CS = 1; //CS置高,片選無效
- for(n = 17; n != 0; n--) _nop_(); //下一次轉(zhuǎn)換需要延遲17us n不等于0
- return (tmp);
- }
- uint get_cur()
- {
- uint vol,cur_1;
- vol = TLC549_ADC(0) * 0.49; //輸入adc電壓的100倍。4.9=5(參照電壓)*/1024(10位)*100(用于顯示)
- cur_1 = 5*vol-1250; //實(shí)際電流的100倍用于顯示,cur_real=(vol_real-2.5)*5
- return cur_1;
- }
- //------------------------------------------
- // 串口初始化函數(shù) 一樣
- //------------------------------------------
- void uart_init()
- {
- TMOD=0x20; //9600bps
- SCON=0x50;
- TH1=0xFD;
- TL1=0xFD;
- TR1=1;
- EA=1;
- }
- //-------------------------------------
- // 主函數(shù)
- //-------------------------------------
- void main()
- {
- uart_init();
- wr_com(0x01); //顯示清屏
- wr_com(0x38); //顯示模式設(shè)置
- wr_com(0x0c); //光標(biāo)設(shè)置
- while(1)
- {
- delay(100);
- AD=get_cur();
- //AD=5*ad_0-1250;
- xianshi(0x80+2,'A');
- xianshi(0x80+3,'=');
- xianshi(0x80+5,0x30+AD%1000/100);
- xianshi(0x80+6,'.');
- xianshi(0x80+7,0x30+AD%100/10);
- xianshi(0x80+8,0x30+AD%10);
- xianshi(0x80+9,'A');
- }
- }
復(fù)制代碼
|
|