久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
pcf制作的電壓表,1602的顯示一直在跳
[打印本頁]
作者:
嘿嘿嘿1234567
時間:
2018-4-19 16:46
標題:
pcf制作的電壓表,1602的顯示一直在跳
我做的一個關于51單片機的電壓表,用pcf8591和1602做的。用protues做的仿真沒問題,一下到實物就沒用。首先是顯示的數字一直在跳,然后也無法測量電壓。下面是我的程序
#include<reg52.h> //????????????
#include<intrins.h>
#define ulong unsigned long
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_PORT P0 //?LED1602_PORT??P0????
#define PCF8591 0x90 //PCF8591 ??
#define NOP() _nop_() /* ????? */
#define _Nop() _nop_() /*?????*/
// ???
sbit SCL=P1^0; //I2C ??
sbit SDA=P1^1; //I2C ??
sbit LCD1602_RS = P2^3; //??1602????????/?????,??/??(H/L)
sbit LCD1602_RW = P2^4; //??1602???????/????,?/?(H/L)
sbit LCD1602_EN = P2^5; //??1602?????????
bit ack; /*?????*/
// ????
uchar AD_CHANNEL;
ulong xdata LedOut[8]; //????????
ulong v,a,ss;
uchar date;
// ????
extern bit ack; //??????
extern void Start_I2c(); //??????
extern void Stop_I2c(); //?????
extern void Ack_I2c(bit a); //????????
extern void SendByte(uchar c); //?????????????
extern bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) ; //?????????????
extern bit ISendStrExt(uchar sla,uchar *s,uchar no); //???????????
extern uchar RcvByte();
void LCD1602_delay_ms(uint n);
void LCD1602_write_com(uchar com);
void LCD1602_write_data(ulong dat);
void LCD1602_write_word(uchar *s);
void Init_LCD1602();
uchar str[4];
bit ISendByte(uchar sla,uchar c);
uchar IRcvByte(uchar sla);
//MS????(12M?????)
void delay_ms(uint n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
//???
void LCD1602_write_com(uchar com)
{
LCD1602_RS = 0; //1602????????/??????0,??/??(H/L),?????????
delay_ms(1);
LCD1602_EN = 1; //??,????????????????
LCD1602_PORT = com; //?????P2?
delay_ms(1);
LCD1602_EN = 0;
}
//???
void LCD1602_write_data(ulong dat)
{
LCD1602_RS = 1; //1602????????/??????0,??/??(H/L),?????????
delay_ms(1);
LCD1602_PORT = dat; //?????P2?
LCD1602_EN = 1;
delay_ms(1);
LCD1602_EN = 0;
}
//?????
void LCD1602_write_word(uchar *s)
{
while(*s>0)
{
LCD1602_write_data(*s);
s++;
}
}
//1602?????
void Init_LCD1602()
{
LCD1602_EN = 0;
LCD1602_RW = 0; //??????
LCD1602_write_com(0x38); //??????
LCD1602_write_com(0x0c); //??????????????????
LCD1602_write_com(0x06); //??????????
LCD1602_write_com(0x01); //????
}
/*******************************************************************
??????
????: void Start_I2c();
??: ??I2C??,???I2C????.
********************************************************************/
void Start_I2c()
{
SDA=1; /*???????????*/
_Nop();
SCL=1;
_Nop(); /*??????????4.7us,??*/
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0; /*??????*/
_Nop(); /* ??????????4μs*/
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0; /*??I2C??,????????? */
_Nop();
_Nop();
}
/*******************************************************************
??????
????: void Stop_I2c();
??: ??I2C??,???I2C????.
********************************************************************/
void Stop_I2c()
{
SDA=0; /*???????????*/
_Nop(); /*???????????*/
SCL=1; /*??????????4μs*/
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1; /*??I2C??????*/
_Nop();
_Nop();
_Nop();
_Nop();
}
/*******************************************************************
????????
????: void SendByte(UCHAR c);
??: ???c????,?????,??????,???????,??
????????.(?????????ack=0)
??????,ack=1; ack=0????????????
********************************************************************/
void SendByte(uchar c)
{
uchar BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++) /*?????????8?*/
{
if((c<<BitCnt)&0x80)SDA=1; /*?????*/
else SDA=0;
_Nop();
SCL=1; /*??????,????????????*/
_Nop();
_Nop(); /*???????????4μs*/
_Nop();
_Nop();
_Nop();
SCL=0;
}
_Nop();
_Nop();
SDA=1; /*8??????????,???????*/
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA==1)ack=0;
else ack=1; /*???????????*/
SCL=0;
_Nop();
_Nop();
}
/*******************************************************************
????????
????: UCHAR RcvByte();
??: ????????????,???????(??????),
??????????????
********************************************************************/
uchar RcvByte()
{
uchar retc;
uchar BitCnt;
retc=0;
SDA=1; /*?????????*/
for(BitCnt=0;BitCnt<8;BitCnt++)
{
_Nop();
SCL=0; /*??????,???????*/
_Nop();
_Nop(); /*?????????4.7μs*/
_Nop();
_Nop();
_Nop();
SCL=1; /*???????????????*/
_Nop();
_Nop();
retc=retc<<1;
if(SDA==1)retc=retc+1; /*????,????????retc? */
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}
/********************************************************************
?????
????: void Ack_I2c(bit a);
??: ?????????(???????????,????a??)
********************************************************************/
void Ack_I2c(bit a)
{
if(a==0)SDA=0; /*???????????? */
else SDA=1;
_Nop();
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop(); /*?????????4μs*/
_Nop();
_Nop();
_Nop();
SCL=0; /*????,??I2C????????*/
_Nop();
_Nop();
}
/*******************************************************************
ADC????[??]????
*******************************************************************/
bit ISendByte(uchar sla,uchar c)
{
Start_I2c(); //????
SendByte(sla); //??????
if(ack==0)return(0);
SendByte(c); //????
if(ack==0)return(0);
Stop_I2c(); //????
return(1);
}
/*******************************************************************
ADC???????
*******************************************************************/
uchar IRcvByte(uchar sla)
{
uchar c;
Start_I2c(); //????
SendByte(sla+1); //??????
if(ack==0)return(0);
c=RcvByte(); //????0
Ack_I2c(1); //??????
Stop_I2c(); //????
return(c);
}
// ??????
void Display()
{
LCD1602_write_com(0x80); //????,??1602????????
LCD1602_write_word("Voltage: ");
LCD1602_write_com(0x80+0x0e); //????,??1602????????
LCD1602_write_word(" V");
}
//????????
void Display_Voltage()
{
LCD1602_write_com(0x80+0x09); //1602???????,?????????????7?
LCD1602_write_data(str[0]+ 0x30);
LCD1602_write_data(str[1] + 0x30);
LCD1602_write_data('.');
LCD1602_write_data(str[2] + 0x30);
LCD1602_write_data(str[3] + 0x30);
/* ss=(v*a);
ss=((ss*8)/100);
LCD1602_write_com(0x80+0x09); //1602???????,?????????????7?
LCD1602_write_data(ss%10000000/1000000 + 0x30);
LCD1602_write_data(ss%1000000/100000 + 0x30);
LCD1602_write_data('.');
LCD1602_write_data(ss%100000/10000 + 0x30);
LCD1602_write_data(ss%10000/1000 + 0x30); */
}
main()
{
Init_LCD1602(); //???LCD1602
Display();
a=50000000/255*2.5;
while(1)
{
ISendByte(PCF8591,0x41);
v=IRcvByte(PCF8591);
ss=(v*a);
ss=((ss*8)/100);
str[0]=ss%10000000/1000000 ;
str[1]=ss%1000000/100000;
str[2]=ss%100000/10000;
str[3]=ss%10000/1000;
Display_Voltage(); //????
}
}
作者:
嘿嘿嘿1234567
時間:
2018-4-19 16:53
在不連接pcf的時候顯示不跳躍,一連上pcf數字就會閃爍
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产免费va
|
精品无码久久久久久久动漫
|
在线免费观看成年人视频
|
成人免费看黄网站在线观看
|
国产成人精品一区二区三区在线
|
精品粉嫩超白一线天av
|
免费a国产
|
91综合在线视频
|
精品久久久久久久久久久院品网
|
成人精品在线视频
|
色婷婷国产精品综合在线观看
|
国产在线一区二区三区
|
国产福利在线小视频
|
在线观看国产网站
|
wwwxxx日本在线观看
|
日韩一二区在线
|
午夜激情国产
|
午夜久久久
|
午夜免费观看
|
国产亚洲精品久久yy50
|
午夜视频在线播放
|
亚洲高清一区二区三区
|
久久国产精品一区二区三区
|
精品久久av
|
五月天婷婷狠狠
|
午夜激情在线视频
|
在线观看日本高清二区
|
免费观看一级特黄欧美大片
|
区一区二在线观看
|
99精品在线
|
国产偷录叫床高潮录音
|
九九热精品视频
|
亚洲精品99
|
蜜月aⅴ国产精品
|
男人的天堂在线视频
|
免费一区二区
|
国产欧美在线观看
|
精品99久久
|
日韩伦理电影免费在线观看
|
免费一级做a爰片久久毛片潮喷
|
国产一区二区三区网站
|