久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
有一段display函數在lcd上不顯示,其他都正常,why?
[打印本頁]
作者:
LIPPPP
時間:
2017-7-3 10:41
標題:
有一段display函數在lcd上不顯示,其他都正常,why?
display()采集的數據都能在lcd上顯示了,可是display2(是按鍵調節數值(電壓))卻不能顯示在lcd上.顯示程序我感覺沒有出錯啊,為何display可以顯示,但display2就顯示不了
#include<reg52.h>
#include"lcd.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;
sbit ADC_CS=P1^0;
sbit ADC_CLK=P1^1;
sbit ADC_DIN=P1^2;
sbit ADC_DOUT=P1^3;
sbit ADC_DRDY=P1^4;
uchar t = 0,c = 0,k,v =53;//k為脈沖周期
sbit S1 = P3^5;
sbit S2 = P3^4;
uchar date[3]={0,0,0};
uint result0[8]={0,0,0,0,0,0,0,0};
uint result1[8]={0,0,0,0,0,0,0,0};
void Display(uint AD_data);
void Display1(uint AD_data);
void Display2();
void PWM_Control1( uchar Width, uchar DutyCycle,uchar count,uchar partern);
void PWM_Control2( uchar Width, uchar DutyCycle,uchar count,uchar partern);
void Delay_1ms(uint c)
{
uchar a,b;
for(;c>0;c--)
{
for(b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void WriteToReg_ADC(uint byteword ) //發送控制字
{
uint AD16bit,Token;
uchar i;
ADC_CLK=1;
ADC_CS=0;
Token=0x80;
AD16bit=byteword;
for(i=0;i<8;i++)
{
if(AD16bit&Token) // 逐一取出各位上的數據
ADC_DIN=1;
else
ADC_DIN=0;
ADC_CLK=1;
ADC_CLK=0; //為發送數據做準備
ADC_CLK=1;
Token=Token>>1;
}
ADC_CLK=1;
ADC_DIN=1;
}
uint ReadADC_16BitValue(uchar channel) //發送控制字準備讀取的通道,接著讀取數據
{
uint AD16bit;
uchar i;
WriteToReg_ADC(0x38|channel);
while(ADC_DRDY==1); // 等待DRDY下降沿讀數據
ADC_CLK=1;
ADC_CS=0;
AD16bit=0x00;
for(i=0;i<16;i++) //巡歷
{
AD16bit=AD16bit<<1;
ADC_CLK=0;
if(ADC_DOUT==1) //等待DRDY低電平時間
AD16bit=AD16bit|0x01; //最低位開始
ADC_CLK=1;
}
ADC_CLK=1;
ADC_DIN=1;
return(AD16bit); //返回數據
}
void InitADC()
{
uchar i;
ADC_CLK=1;
ADC_DIN=1;
ADC_CS=0;
for(i=0;i<40;i++) //自校驗
{
ADC_CLK=0;
ADC_CLK=1;
}
WriteToReg_ADC(0x20); //先寫通信寄存器,下一步時鐘寄存器
WriteToReg_ADC(0x02); //100HZ CLKIDS=0 CLKDIV=0(器件內部頻率)
WriteToReg_ADC(0x10); //設置寄存器
WriteToReg_ADC(0x44); //自校準
WriteToReg_ADC(0x21); //通道2
WriteToReg_ADC(0x02);
WriteToReg_ADC(0x11);
WriteToReg_ADC(0x44);
Delay_1ms(50);
}
void PWM_Control1( uchar Width, uchar DutyCycle,uchar count,uchar partern) //1ms為最小單位
{ uchar i,j;
//脈寬設置 Wdith
//占空比 X0% DutyCycle
//脈沖個數 count
// pin = ;
k = (Width*10)/DutyCycle; //PWM整個周期
if(partern == 6)
{
for(i=0;i<k*count;i++)
{
P1_6= 0;
delay(Width);
P1_6= 1;
delay(k-Width);
}
}
if(partern == 7)
{
for(j=0;j<k*count;j++)
{
P1_7 = 0;
delay(Width);
P1_7 = 1;
delay(k-Width);
}
}
}
void PWM_Control2( uchar Width, uchar DutyCycle,uchar count,uchar partern) //1ms為最小單位
{ uchar i,j;
//脈寬設置 Wdith
//占空比 X0% DutyCycle
//脈沖個數 count
// pin = ;
k = (Width*10)/DutyCycle; //PWM整個周期
if(partern == 6)
{
for(i=0;i<k*count;i++)
{
P1_6= 0;
delay(Width);
P1_6= 1;
delay(k-Width);
}
}
if(partern == 7)
{
for(j=0;j<k*count;j++)
{
P1_7= 0;
delay(Width);
P1_7= 1;
delay(k-Width);
}
}
}
/***************按鍵S1,S2調節電壓************/
unsigned int Set()
{
if( S1 == 0)
{
delay(5);
if(S1 == 0)
{
v++;
}
}
if(S2 == 0)
{
delay(5);
if(S2 == 0)
{
v--;
}
}
return v;
}
/*******************設定值與檢測值比較****************/
void compare()
{
if(v<50)PWM_Control1(7,7,1,7);else PWM_Control2(7,7,1,6);
}
void main()
{
uchar i;
ulong sum=0;
uint result;
float h;
lcd1602init();
InitADC();
// v = Set();
lcd_pos(0x00);
lcd1602writedata('V');
lcd1602writedata('=');
lcd1602writedata(5+0x30);
lcd1602writedata(0x2e);
lcd1602writedata(0x30);
lcd1602writedata(0x30);
lcd1602writedata('V');
lcd_pos(0x08);
lcd1602writedata('S');
lcd1602writedata('e');
lcd1602writedata('t');
lcd1602writedata('=');
/* lcd1602writedata((v/10)+0x30);
lcd1602writedata(0x2e);
lcd1602writedata((v%10)+0x30); */
lcd_pos(0x40);
lcd1602writedata('T');
lcd1602writedata('e');
lcd1602writedata('s');
lcd1602writedata('t');
lcd1602writedata('=');
while(1)
{
WriteToReg_ADC(0x20); //先寫通信寄存器,下一步時鐘寄存器
WriteToReg_ADC(0x02); //100HZ CLKIDS=0 CLKDIV=0(器件內部頻率)
WriteToReg_ADC(0x10); //設置寄存器
WriteToReg_ADC(0x44); //自校準后DRDY返回低電平
Delay_1ms(60);
for(i=0;i<8;i++) //讀取數據并轉換成電壓
{
result0[i]=ReadADC_16BitValue(0);
sum=sum+result0[i];
}
sum=sum/8;
result=(uint)sum;
sum=0;
h=result;
result=h*5000/65536;
Display(result);
result=0;
Delay_1ms(50);
/**********************就是這個函數********************/
/*******************同樣在主循環中,display正常,但這個display2不顯示***********/
v = Set();
Display2(); //Display2函數寫在主循環中但LCD卻不顯示
Delay_1ms(5);
compare();// 判定設定值與檢測值大小,從而輸出PWM1或PWM2 (P1^6或P1^7)
Delay_1ms(5);
// Delay_1ms(500);
/* WriteToReg_ADC(0x21);
WriteToReg_ADC(0x02);
WriteToReg_ADC(0x11);
WriteToReg_ADC(0x44);
Delay_1ms(60);
for(i=0;i<8;i++)
{
result1[i]=ReadADC_16BitValue(1);
sum=sum+result1[i];
}
sum=sum/8;
result=(uint)sum;
sum=0;
h=result;
result=h*5000/65536;
Display1(result);
result=0;
// Delay_1ms(500); */
}
}
void Display(uint AD_data)
{
date[2]= (AD_data)/1000;
date[1]= (AD_data)/100%10;
date[0]= (AD_data)/10%10;
lcd_pos(0x45);
lcd1602writedata(0x30+date[2]);
lcd1602writedata(0x2e);
lcd1602writedata(0x30+date[1]);
lcd1602writedata(0x30+date[0]);
lcd1602writedata('V');
}
/*void Display1(uint AD_data)
{
date[2]= (AD_data)/1000;
date[1]= (AD_data)/100%10;
date[0]= (AD_data)/10%10;
lcd_pos(0x49);
lcd1602writedata(0x30+date[2]);
lcd1602writedata(0x2e);
lcd1602writedata(0x30+date[1]);
lcd1602writedata(0x30+date[0]);
} */
/****************就是這個Display2函數*********************/
void Display2()
{ v = Set();
lcd_pos(0x13);
lcd1602writedata((v/10)+0x30);
lcd1602writedata(0x2e);
lcd1602writedata((v%10)+0x30);
}
作者:
LIPPPP
時間:
2017-7-3 11:11
靠找到了. 寫了lcd_pos(0x13)這是錯的位置, 應該是在lcd_pos(0x0d),真是被自己蠢哭
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
狠狠干狠狠操
|
亚洲黄色精品
|
精品一二区
|
日韩一区二区在线播放
|
九九九九精品
|
天天躁日日躁狠狠躁
|
狠狠干美女
|
亚洲欧美视频在线观看
|
亚洲色综合
|
国产精品一区二区三区免费
|
天堂网在线资源
|
特黄一级毛片
|
亚洲精品一区中文字幕乱码
|
一区二区视频网站
|
国产三级一区
|
欧美黄色一区二区
|
免费看a
|
中文字幕av久久爽一区
|
国产欧美综合一区二区三区
|
99久热
|
av在线资源
|
草草在线观看
|
国产免费黄色
|
亚洲h片
|
中文字幕日韩一区
|
婷婷久久五月天
|
久久免费高清视频
|
国内精品国产成人国产三级
|
色婷婷在线视频
|
久久夜色精品国产欧美乱极品
|
成人羞羞网站
|
午夜精品久久
|
91麻豆精品国产91久久久久久
|
正在播放国产精品
|
欧美日韩综合在线
|
免费av一区二区
|
成人影片在线
|
欧美性爽
|
依人久久
|
一区二区三区网站
|
日韩一区二区av
|