欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
求教STC12C2052AD單片機(jī)芯片程序的問題
[打印本頁]
作者:
Host
時間:
2019-7-23 12:40
標(biāo)題:
求教STC12C2052AD單片機(jī)芯片程序的問題
描述一下想要實現(xiàn)的功能:按下K1鍵,串口發(fā)送字符串,通過另一片芯片接收并顯示在1602上。
問題:按K1鍵不會發(fā)送,反而按復(fù)位鍵才會發(fā)送。1602也不會實時顯示,只有在接收時按復(fù)位鍵才會顯示,我覺得是串口設(shè)置的問題,但是我看了看51的配置,我覺得沒有毛病呀,是這塊芯片不一樣嗎?所以來問問,程序如下:
#include "F:\C51\C51\INC\STC\STC12C2052AD.h"
#define uint unsigned int
#define uchar unsigned char
//#define jz 11059200 /*使用11.0592M晶體*/
//#define bt 9600 /*波特率定義為9600*/
sbit K1=P3^7;
sbit rs=P3^3;
sbit rw=P3^4;
sbit en=P3^5;
uchar Redata[64];
uchar i=0;
uchar Temp;
/***************延時***************/
void delay(uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
/***************寫命令***************/
void lcd_wcom(uchar com)
{
rs=0;
rw=0;
P1=com;
delay(5);
en=1;
en=0;
}
/***************寫數(shù)據(jù)***************/
void lcd_wdat(uchar dat)
{
rs=1;
rw=0;
P1=dat;
delay(5);
en=1;
en=0;
}
/***************LCD初始化***************/
void lcd_init()
{
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01);
}
/***************設(shè)置顯示位置**************************/
void lcd_wz( uchar x, uchar y )
{
uchar address;
if (y == 1)
address = 0x80 + x;
else
address =0xc0+ x;
lcd_wcom(address);
}
/***************顯示字符串函數(shù)***************/
void lcd_distr(uchar x,uchar y,uchar *pData)
{
lcd_wz( x, y );
while (*pData != '\0')
{
lcd_wdat(*pData);
pData++;
}
}
/***************串口初始化***************/
void uart_init(void)
{
TMOD = 0x20; /*step 2: 根據(jù)串口通信方式 確定是否設(shè)置波特率*/
SCON = 0x40;
PCON = 0x00;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1; /*step 3 :啟動*/
EA = 1; /*step 4: 是否啟用中斷函數(shù)*/
ES = 1;
}
/***************發(fā)送字節(jié)***************/
void send(uchar Sedate) //發(fā)送一個字節(jié)的數(shù)據(jù),即為待發(fā)送數(shù)據(jù)。
{
SBUF=Sedate; //將數(shù)據(jù)寫入到串口緩沖
while(!TI);
TI = 0; //等待發(fā)送完畢
}
/***************發(fā)送字符串***************/
void sendzfc(uchar *pdate)
{
while((*pdate)!='\0') //發(fā)送字符串,直到遇到0才結(jié)束
{
send(*pdate); //發(fā)送一個字符
pdate++; //移動到下一個字符
}
}
/***************接收字節(jié)***************/
uchar receive(void)
{
uchar redate;
while(!RI);
RI = 0;
redate=SBUF;
return redate;
}
/***************接收字符串***************/
uchar recezfc(void)
{
uchar *qdate;
while((*qdate)!='\0') //發(fā)送字符串,直到遇到0才結(jié)束
{
receive(); //發(fā)送一個字符
qdate++; //移動到下一個字符
}
return *qdate;
}
/***************主函數(shù)***************/
void main()
{
uart_init();
while(1)
{
lcd_init();
if(K1==0){
delay(200);
if(K1==0)
{
sendzfc("OK") ;
}
}
//Redata[i]=recezfc() ;
if(Redata[0]==0x4F && Redata[1]==0x4B)
{
lcd_distr(0,1," ESD Test ");
lcd_distr(6,2,"OK");
delay(200);
}
}
}
/***************中斷函數(shù)***************/
void uart_rx() interrupt 4
{
if(RI) //判斷是接收中斷產(chǎn)生
{
Temp = SBUF;
Redata[i] = Temp;
i++;
RI=0;
}
if(TI)
TI = 0;
}
復(fù)制代碼
希望大家提供寶貴的意見,十分感謝!
作者:
Host
時間:
2019-7-23 13:09
把SCON 改為 0x50 也于事無補(bǔ),頭大,按鍵無論放在哪都無法識別
作者:
Host
時間:
2019-7-23 13:11
復(fù)位時SCON會全部置為0,這和問題有聯(lián)系嗎?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1