void delay(uint z);//延時(shí),1微妙時(shí)間有點(diǎn)短

十載的高邑網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷(xiāo)型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整高邑建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“高邑網(wǎng)站設(shè)計(jì)”,“高邑網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
你看看下面我做的程序,在2051+12M晶振通過(guò)你可以套用這個(gè)程序,不行的話就改長(zhǎng)延時(shí)
/******************AT89S51使用12M晶振*******************/
//LCD腳接法,根據(jù)實(shí)際接法定義
#define LCM_D4_RS P3_2//第4腳數(shù)據(jù)/命令
#define LCM_D5_RW P3_5//第5腳讀/寫(xiě)
#define LCM_D6_E P3_7//第6腳使能
#define LCM_D16_BLK P3_0//背光負(fù)極
#define LCM_D7_Data P1//第7-14腳數(shù)據(jù)
//LCD腳接法,根據(jù)實(shí)際接法定義
#define Busy 0x80 //用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)
#define _LCD_BIT_IS 4 //CPU與LCD1602間使用DB7-DB4這4根數(shù)據(jù)線進(jìn)行傳輸
#include at89x51.h //頭文件
#include string.h //strlen()函數(shù)頭文件
void LCMInit(void); //LCM初始化化
void WriteDataLCM(unsigned char WDLCM); //寫(xiě)數(shù)據(jù)
void WriteCommandLCM(unsigned char WCLCM,int BuysC); //寫(xiě)指令
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //按指定位置顯示一個(gè)字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//按指定位置顯示一串字符
void Delay5Ms(void); //5ms延時(shí)
unsigned char ReadStatusLCM(void); //讀狀態(tài)
unsigned char code Greetings_Line1[] = {"Welcome Control"};
unsigned char code Greetings_Line2[] = {" ChuLong Make "};
data unsigned char cou = 0; // 定義軟計(jì)數(shù)器,放在程序最前面的寄存器定義部分
void main(void)
{
LCMInit(); //LCM初始化
LCM_D16_BLK = 0; //開(kāi)背光燈
TMOD = 0x11; // 定時(shí)/計(jì)數(shù)器0,1工作于方式1 16位定時(shí)
TH0 = 0x3c; // 預(yù)置產(chǎn)生50ms時(shí)基信號(hào)
TL0 = 0xb0;
EA = 1; // 開(kāi)總中斷
ET0 = 1; // 定時(shí)/計(jì)數(shù)器0允許中斷
TR0 = 1; // 開(kāi)定時(shí)/計(jì)數(shù)器0
DisplayListChar(0, 0, Greetings_Line1);
DisplayListChar(0, 1, Greetings_Line2);
// while(1);
}
//
void LCMInit(void) //LCM初始化
{
WriteCommandLCM(0x38,0); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
Delay5Ms();
WriteCommandLCM(0x38,0);
Delay5Ms();
WriteCommandLCM(0x38,0);
#if(_LCD_BIT_IS == 8) //CPU與LCD1602間使用DB0-DB8這8根數(shù)據(jù)線進(jìn)行傳輸
WriteCommandLCM(0x38,1); //顯示8位模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào)
#else //CPU與LCD1602間使用DB0-DB4這4根數(shù)據(jù)線進(jìn)行傳輸
WriteCommandLCM(0x28,1); //顯示4位模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào)
#endif
WriteCommandLCM(0x08,1); //關(guān)閉顯示
WriteCommandLCM(0x01,1); //顯示清屏
WriteCommandLCM(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
WriteCommandLCM(0x0C,1); // 顯示開(kāi)及光標(biāo)設(shè)置
}
//寫(xiě)數(shù)據(jù)
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM(); //檢測(cè)忙
LCM_D4_RS = 1;
LCM_D5_RW = 0;
#if(_LCD_BIT_IS == 8) //CPU與LCD1602間使用DB0-DB8這8根數(shù)據(jù)線進(jìn)行傳輸
{
LCM_D7_Data = WDLCM;
}
#else //CPU與LCD1602間使用DB0-DB4這4根數(shù)據(jù)線進(jìn)行傳輸
{
LCM_D7_Data = 0x0f; //清高四位
LCM_D7_Data |= WDLCM 0xf0; //寫(xiě)高四位
LCM_D6_E = 0;
LCM_D6_E = 1;
WDLCM = WDLCM 4; //低四位移到高四位
LCM_D7_Data = 0x0f; //清高四位
LCM_D7_Data |= WDLCM 0xf0; //寫(xiě)低四位
}
#endif
LCM_D6_E = 0;
LCM_D6_E = 1;
}
//寫(xiě)指令
void WriteCommandLCM(unsigned char WCLCM,int BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
{
if(BuysC)
ReadStatusLCM(); //根據(jù)需要檢測(cè)忙
LCM_D4_RS = 0;
LCM_D5_RW = 0;
#if(_LCD_BIT_IS == 8) //CPU與LCD1602間使用DB7-DB4這4根數(shù)據(jù)線進(jìn)行傳輸
{
LCM_D7_Data = WCLCM;
}
#else
{
LCM_D7_Data = 0x0f; //清高四位
LCM_D7_Data |= WCLCM 0xf0; //寫(xiě)高四位
LCM_D6_E = 0;
LCM_D6_E = 1;
WCLCM = WCLCM 4; //低四位移到高四位
LCM_D7_Data = 0x0f; //清高四位
LCM_D7_Data |= WCLCM 0xf0; //寫(xiě)低四位
}
#endif
LCM_D6_E = 0;
LCM_D6_E = 1;
}
//讀狀態(tài)
unsigned char ReadStatusLCM(void)
{
LCM_D7_Data = 0xff;
LCM_D4_RS = 0;
LCM_D5_RW = 1;
LCM_D6_E = 1;
while (LCM_D7_Data Busy); //檢測(cè)忙信號(hào)
return(LCM_D7_Data);
}
//按指定位置顯示一個(gè)字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y = 0x1;
X = 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40;
X |= 0x80; //算出指令碼
WriteCommandLCM(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
WriteDataLCM(DData);
}
//按指定位置顯示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
int ListLength;
Y = 0x1;
X = 0xF; //限制X不能大于15,Y不能大于1
for(ListLength = 0;ListLength strlen(DData);ListLength++) //若到達(dá)字串尾則退出
{
if (X = 0xF) //X坐標(biāo)應(yīng)小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]); //顯示單個(gè)字符
X++;
}
}
}
//5ms延時(shí)
void Delay5Ms(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}
//10s延時(shí)
void tiem0(void) interrupt 1
{ // T/C0中斷服務(wù)程序(產(chǎn)生50ms時(shí)基信號(hào))
if(cou 60)
{ // 計(jì)數(shù)值到1000(1s) (****時(shí)間為倒計(jì)時(shí)****)
cou = 0; // 軟計(jì)數(shù)器清零
}
cou++; // 軟計(jì)數(shù)器加1
TH0 = 0x3c; // 重置定時(shí)常數(shù)
TL0 = 0xb0;
}
我才學(xué)C。你說(shuō)的我就能幫你搞個(gè)加減乘除運(yùn)算了。以下是代碼。#includestdio.h
main()
{
int i=1,flag=0; float a,b,c; char v;
printf("輸入數(shù)字完成運(yùn)算");
scanf("%f%c%f",a,v,b);
while(v!='#')
{ switch(v)
{ case '+':c=a+b;break;
case '-':c=a-b;break;
case '*':c=a*b;break;
case '/':
if(b==0) flag=1;
else c=a/b; break;
default: flag=2;
}
if(flag==0)
{
printf("%f%c%f=%f\n",a,v,b,c);
i++;
}
if(flag==1) printf("shucuole");
if(flag==2) printf("zifucuole");
printf("jixushuchu");
scanf("%f%c%f",a,v,b);
}
}我是個(gè)新手。但可以保證代碼的正確
#define?LCD1602_FLAG
#define?LCD1602_PORT?P0
#includereg51.h
#includestddef.h
#define?uchar?unsigned?char
sbit?lcd1602_rs=P2^0;
sbit?lcd1602_e=P2^2;
sbit?lcd1602_rw=P2^1;
sbit?lcd1602_busy=P0^7;
uchar?str[]="This?is?Key?Test";
uchar?keyval,keystr[16];
void?delay(uchar?a)
{
uchar?i;
while(a--)for(i=0;i120;i++);
}
/*
************************************
*?函數(shù)名稱(chēng):lcd1602_CheckBusy()
*?函數(shù)功能:狀態(tài)查詢
************************************
*/
void?lcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}
/*
***************************************
*?函數(shù)名稱(chēng):?lcd1602_WriteCmd()
*?函數(shù)功能:寫(xiě)命令
*?入口參數(shù):命令字
*?出口參數(shù):無(wú)
***************************************
*/
void?lcd1602_WriteCmd(const?uchar?cmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}
/*
*******************************************
*?函數(shù)名稱(chēng):lcd1602_WriteData()
*?函數(shù)功能:寫(xiě)數(shù)據(jù)
*?入口參數(shù):c--待寫(xiě)數(shù)據(jù)
*?出口參數(shù):無(wú)
*********************************************
*/
void?lcd1602_WriteData(const?uchar?c)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}
/*
***********************************************
*?函數(shù)名稱(chēng):lcd1602_Init()
*?函數(shù)功能:初始化LCD
*?入口參數(shù):無(wú)
*?出口參數(shù):無(wú)
***********************************************
*/
void?lcd1602_Init()
{
lcd1602_WriteCmd(0x38); //顯示模式為8位2行5*7點(diǎn)陣
lcd1602_WriteCmd(0x0c);?//display?enable,flag?enable,flash?enable,
lcd1602_WriteCmd(0x06);?//flag?move?to?right,screen?don't?move
lcd1602_WriteCmd(0x01);?//clear?screen
}
/*
************************************************
*?函數(shù)名稱(chēng):lcd1602_Display()
*?函數(shù)功能:?字符顯示
*?入口參數(shù):ptr--字符或字符串指針
*?出口參數(shù):無(wú)
*?說(shuō)????明:用戶可通過(guò)以下方式來(lái)調(diào)用:
*???????????1)lcd1602_Display("Hello,world!");
*???????????2)?INT8U?存儲(chǔ)類(lèi)型?txt[]="要顯示的字符串";
*??????????????或者?INT8U?存儲(chǔ)類(lèi)型?txt[]={'t','x','t',..,'\0'};
*??????????????INT8U?*ptr;
*??????????????ptr=txt;
*??????????????lcd1602_Display(ptr);
*??????????????或?lcd1602_Display(txt);
*??????????????或?lcd1602_Display(txt);
************************************************
*/
void?lcd1602_Display(const?uchar?*ptr,uchar?line)
{
uchar?data?i=0;
uchar?*data?q;
q=ptr;
switch(line)
{
case?0:
lcd1602_WriteCmd(0x80);
while(q!=NULL??(*q!='\0')??i16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
case?1:
lcd1602_WriteCmd(0xc0);
while(q!=NULL??(*q!='\0')??i16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
}
}
uchar?kbscan(void)
{
unsigned?char?sccode,recode;
P3=0x0f;??//發(fā)0掃描,列線輸入
if?((P3??0x0f)?!=?0x0f)??//有鍵按下
{
delay(20);???//延時(shí)去抖動(dòng)
if?((P30x0f)!=?0x0f)
{
sccode?=?0xef;????//逐行掃描初值
while((sccode0x01)!=0)
{
P3=sccode;
if((P30x0f)!=0x0f)
{
recode=(P30x0f)|0xf0;
while((P30x0f)!=0x0f);//等待鍵抬起
return((~sccode)+(~recode));
?}
else
sccode=(sccode1)|0x01;
}
}
}
return?0;??//無(wú)鍵按下,返回0
}
uchar?getkey(void)
{
uchar?key;
key=kbscan();
if(key==0){keyval=0xff;return(0);}
switch(key)
{
case?0x11:keyval=7;break;
case?0x12:keyval=4;break;
case?0x14:keyval=1;break;
case?0x18:keyval=10;break;
case?0x21:keyval=8;break;
case?0x22:keyval=5;break;
case?0x24:keyval=2;break;
case?0x28:keyval=0;break;
case?0x41:keyval=9;break;
case?0x42:keyval=6;break;
case?0x44:keyval=3;break;
case?0x48:keyval=11;break;
case?0x81:keyval=12;break;
case?0x82:keyval=13;break;
case?0x84:keyval=14;break;
case?0x88:keyval=15;break;
default:keyval=0xff;break;
}
if(keyval!=0xff)return(1);
else?return(0);
}
main()
{
uchar?num;
lcd1602_Init();
lcd1602_Display(str,0);
while(1)
{
if(getkey())
{
keystr[num]=keyval+0x30;
lcd1602_Display(keystr,1);
num++;
num%=16;
}
}
}
51單片機(jī)是對(duì)所有兼容Intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱(chēng)。該系列單片機(jī)的始祖是Intel的8031單片機(jī),后來(lái)隨著Flash rom技術(shù)的發(fā)展,8031單片機(jī)取得了長(zhǎng)足的進(jìn)展,成為應(yīng)用最廣泛的8位單片機(jī)之一,其代表型號(hào)是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測(cè)控系統(tǒng)之中。很多公司都有51系列的兼容機(jī)型推出,今后很長(zhǎng)的一段時(shí)間內(nèi)將占有大量市場(chǎng)。51單片機(jī)是基礎(chǔ)入門(mén)的一個(gè)單片機(jī),還是應(yīng)用最廣泛的一種。需要注意的是52系列的單片機(jī)一般不具備自編程能力。
寫(xiě)一個(gè)函數(shù)把整型數(shù)據(jù)每位提取出來(lái),就可以顯示每位數(shù)據(jù)了。
void display_tem(x,y,int getdata) //getdata就是你采集來(lái)的數(shù)據(jù)吧~~?
{
display_char(x,y,getdata/10);//我不知道你的溫度是幾位的整數(shù)~ 這里我
? ? ? ? ? ? ? ? ? ? ? ? //假設(shè)是兩位
? ? ? ? ? ? ? ? ? ? ? ?//display_char用你自己的字符顯示函數(shù)替代 ?
display_char(x+1,y,getdata%10);
}
當(dāng)前名稱(chēng):1602顯示函數(shù)C語(yǔ)言 c++顯示函數(shù)
轉(zhuǎn)載注明:http://www.js-pz168.com/article22/ddieocc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、電子商務(wù)、網(wǎng)站策劃、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)