单片机源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- void delay(uchar ms); //延时函数
- void wr_com(unsigned char com); //写入指令数据到LCD
- void wr_dat(unsigned char dat); //写入字符显示数据到LCD
- void xianshi(uchar dizhi, uchar suzi); //单独写数到液晶函数 ( 地址 数据 )
- //uchar TLC549_ADC(void); //TLC549模数转换
- //uchar get_cur(void);
- void uart_init(); //串口初始化函数
- 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;
- ////-------------------------------------
- //// 主函数
- ////-------------------------------------
- //void main()
- //{
- // uart_init();
- // wr_com(0x01); //显示清屏
- // wr_com(0x38); //显示模式设置
- // wr_com(0x0c); //光标设置
- // 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');
- // }
- //}
- //----------------------------------
- // 延时子程序
- //----------------------------------
- void delay(uchar ms)
- {
- uchar i ;
- while(ms--)
- {
- for(i = 0 ; i<250;i++) ;
- }
- }
- //-------------------------------------
- // 写入指令数据到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 ;
- }
-
- //-------------------------------------------------
- // 写入字符显示数据到LCD
- //--------------------------------------------------
- void wr_dat(unsigned char dat)
- {
- rs = 1 ;
- rw = 0 ;
- e = 0 ;
- P0 = dat ;
- delay(1);
- e = 1 ; //E上升沿写入数据
- delay(1);
- e = 0 ;
- }
- //------------------------------------------------------
- // 单独写数到液晶函数 ( 地址 数据 )
- //------------------------------------------------------
- void xianshi(uchar dizhi, uchar suzi)
- {
- wr_com(dizhi);
- wr_dat(suzi);
- }
- //-----------------------------------------
- // TLC549模数转换
- //-----------------------------------------
- uchar TLC549_ADC(uchar ain)
- {
- uchar n, tmp;
- CS = 1; //CS置高,片选无效
- CLK = 0;
- CS = 0; //CS置低,片选有效,同时DO输出高位
- _nop_();
- _nop_(); //适当延迟时间1.4us Setup Time
- for(n = 0; n < 8; n++) //串行数据移位输入
- {
- tmp <<= 1;//每个高电平时钟读取1个bit,8个时钟可以读取1个byte的转换结果,数据高位先读取
- tmp |= DI;//程序中用八次循环,可以读出一个字节的转换结果
- CLK = 1; //0.4us
- _nop_(); //延迟0.1us
- CLK = 0; //0.4us
- }
- CS = 1; //CS置高,片选无效
- for(n = 17; n != 0; n--) _nop_(); //下一次转换需要延迟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; //实际电流的100倍用于显示,cur_real=(vol_real-2.5)*5
- return cur_1;
- }
- //------------------------------------------
- // 串口初始化函数 一样
- //------------------------------------------
- void uart_init()
- {
- TMOD=0x20; //9600bps
- SCON=0x50;
- TH1=0xFD;
- TL1=0xFD;
- TR1=1;
- EA=1;
- }
- //-------------------------------------
- // 主函数
- //-------------------------------------
- void main()
- {
- uart_init();
- wr_com(0x01); //显示清屏
- wr_com(0x38); //显示模式设置
- wr_com(0x0c); //光标设置
- 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');
- }
- }
复制代码
|