标题:
单片机程序求助,为什么lcd不显示频率
[打印本页]
作者:
sxksxk
时间:
2020-5-12 19:55
标题:
单片机程序求助,为什么lcd不显示频率
O$)G2C}0U2FLZ0PK$V0~]%8.png
(81.6 KB, 下载次数: 57)
下载附件
2020-5-12 19:52 上传
代码如下
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
/*********** LCD ************/
#define RS P22
#define RW P21
#define LCDEN P20
#define LCD_DATA P0
#define LCD_BUSY P0
uchar idata lcd_code[10];
//*****************************************???????***************************************//
void delayus(uint us)
{
for(;us >0;us--)
{
_nop_();
}
}
void delayms(uint ms)//??????? ms
{
uchar a,b,c;
while(ms--)
{
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
}
//**********????????????**********
void string_copy(uchar *target,uchar *source)//????????? target:??? source???
{
uchar i = 0;
for(i = 0;source[i] != '\0';i++)//???target????? ??????????
{
target[i] = source[i];
}
target[i] = '\0';
}
//**********???????????**********
uchar string_cmp(uchar *target,uchar *source)//???????? target:??? source???
{
uchar revalue;
uchar i = 0;
for(i = 0;target[i] != '\0' && source[i] != '\0';i++) //????????????'\0'????? ???????????'\0'??????
{
if(target[i] == source[i])
{
revalue = 1;
}
else
{
revalue = 0;
break;
}
}
if(revalue == 1)
{
if(target[i] == '\0' && source[i] == '\0')
revalue = 1;
else
revalue = 0;
}
return(revalue);
}
//**************** LCD ********************
//LCD??????????
void busy_check() //?μ???
{
RW = 1; //??
RS = 0; //???????
LCD_DATA = 0xFF;//??????????????I/O?????1
LCDEN = 0;
_nop_();
_nop_();
_nop_();
_nop_();
LCDEN = 1;// EN????????? ????????????
_nop_();
_nop_();
_nop_();
_nop_();
while(1)
{
if(LCD_BUSY == 0)//P07 == 0???????
break;
}
delayms(2);//????????????
}
void lcdwrcom(uchar command)//д???
{
busy_check();
RW = 0;//д
RS = 0;//???????
LCD_DATA = command;
LCDEN = 1;//??????д?????
_nop_();
_nop_();
_nop_();
_nop_();
LCDEN = 0;
}
void lcdwrdata(uchar lcd_data)//д???? ???????????????????????
{
busy_check();
RW = 0;//д
RS = 1;//????????
LCD_DATA = lcd_data;
LCDEN = 1;//??????д?????
_nop_();
_nop_();
_nop_();
_nop_();
LCDEN = 0;
}
void lcd_init()
{
delayms(15);//??? lcd1602??絽????????????
RW = 0;//д
RS = 0;//???????
LCD_DATA = 0x38;// 0x38????????????16X2 ???,5X7 ????,8 λ??????'
LCDEN = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCDEN = 0;
delayms(5);
lcdwrcom(0x0c);//????? ???? ?????
lcdwrcom(0x06);//???3 ??????? ????????????????Ч
lcdwrcom(0x01);// ??????????λ?????00Hλ?á?
}
//LCD?????????
void address(uchar x,uchar y) //??λ??????д??????
{
uchar location;
if(x == 0)
location = 0x80|y;
else
location = 0xC0|y;
lcdwrcom(location);
}
void printchar(uchar x,uchar y,uchar letter)//???????????????
{
address(x,y);
lcdwrdata(letter);
}
void printword(uchar x,uchar y,uchar *word) //??????????????飩
{
uchar i = 0;
for(i = 0;word[i] != '\0';i++)
{
address(x,y + i);
lcdwrdata(word[i]);
}
}
void printuint(uchar x,uchar y,uchar num_ws_max,uint num)//???????????? 0~65535 x:?? y???? num_ws_max ?????????λ??
{
uchar i = 0;
uchar str[5] = {0x20,0x20,0x20,0x20,0x20};
if(num >= 10000)
{
str[0] = num/10000 + '0';
str[1] = num%10000/1000 + '0';
str[2] = num%1000/100 + '0';
str[3] = num%100/10 + '0';
str[4] = num%10 + '0';
// str[5] = '\0'; //?????????????????
}
else if(num >= 1000)
{
str[0] = num/1000 + '0';
str[1] = num%1000/100 + '0';
str[2] = num%100/10 + '0';
str[3] = num%10 + '0';
str[4] ='\0';
}
else if(num >= 100)
{
str[0] = num/100 + '0';
str[1] = num%100/10 + '0';
str[2] = num%10 + '0';
str[3] = '\0';
}
else if(num >=10)
{
str[0] = num/10 + '0';
str[1] = num%10 + '0';
str[2] = '\0';
}
else if(num >= 0)
{
str[0] = num + '0';
str[1] = '\0';
}
for(i = 0;i <= 5;i++) //uint???? ????65535 ?5λ??
{
if(str[i] != '\0' && i < num_ws_max)
{
address(x,y + i);
lcdwrdata(str[i]);
}
else if(str[i] == '\0' && i < num_ws_max)
{
address(x,y+i);
lcdwrdata(' ');//??? // ???????????????λ????Χ???????????λ??0x20?????
//???磺?????3λ??999 ?????99??????9+'0' 9+'0' 0x20
}
}
}
void printvolt(uchar x,uchar y,uint v) //?????3λ??????100 ??????λС?? ???????????? 0.00~5.00V
{
uchar str[4] = "0";
uchar i = 0;
str[0] = v/100 + '0';
str[1] = '.';
str[2] = v%100/10 + '0';
str[3] = v%10 + '0';
printword(x,y,str);
}
//************ ????? *************
uint t0_flag = 0;
uchar t1_flag = 0;
uint fre = 0;
void timer_init()
{
ET0 = 1;
ET1 = 1;
TMOD = 0x15; //?????0???????? , ?????1???????1
TH0 = 255;
TL0 = 255;
TH1 = 0x3C;
TL1 = 0xB0;//50MS
}
void timer0() interrupt 1
{
TH0 = 255;
TL0 = 255;
t0_flag++;
}
void timer1() interrupt 3
{
TH1 = 0x3C;
TL1 = 0xB0;
t1_flag++;
if(t1_flag == 20)
{
fre = t0_flag;
TR0 = 0;
TR1 = 0;
t1_flag = 0;
}
}
void main()
{
EA = 1;
lcd_init();
timer_init();
while(1)
{
if(P10 == 0)
{
TH0 = 255;
TL0 = 255;
TH1 = 0x3C;
TL1 = 0xB0;
t0_flag = 0;
t1_flag = 0;
TR0 = 1;
TR1 = 1;
}
printword(0,0,"PL:");
printuint(0,4,5,t0_flag);
printword(1,0,"t1_flag:");
printuint(1,8,3,t1_flag);
}
}
复制代码
这是程序,乱码的地方原来是注释。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1