導航:首頁 > 操作系統 > 單片機讓屏幕顯示數字

單片機讓屏幕顯示數字

發布時間:2025-01-01 02:35:49

⑴ 用51單片機控制1602液晶顯示10進制數字~~

液晶時鍾設計
#include<reg51.h> //包含單片機寄存器的頭文件
#include<stdlib.h> //包含隨機函數rand()的定義文件
#include<intrins.h> //包含_nop_()函數定義的頭文件
sbit RS=P2^0; //寄存器選擇位,將RS位定義為P2.0引腳
sbit RW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳
sbit E=P2^2; //使能信號位,將E位定義為P2.2引腳
sbit BF=P0^7; //忙碌標志位,,將BF位定義為P0.7引腳
unsigned char code digit[ ]={"0123456789"}; //定義字元數組顯示數字
unsigned char code string[ ]={"BeiJing Time"}; //定義字元數組顯示提示信息
unsigned char count; //定義變數統計中斷累計次數
unsigned char s,m,h; //定義變數儲存秒、分鍾和小時
/*****************************************************
函數功能:延時1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************************
函數功能:延時若干毫秒
入口參數:n
***************************************************/
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
/*****************************************************
函數功能:判斷液晶模塊的忙碌狀態
返回值:result。result=1,忙碌;result=0,不忙
***************************************************/
unsigned char BusyTest(void)
{
bit result;
RS=0; //根據規定,RS為低電平,RW為高電平時,可以讀狀態
RW=1;
E=1; //E=1,才允許讀寫
_nop_(); //空操作
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
result=BF; //將忙碌標志電平賦給result
E=0; //將E恢復低電平
return result;
}
/*****************************************************
函數功能:將模式設置指令或顯示地址寫入液晶模塊
入口參數:dictate
***************************************************/
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1); //如果忙就等待
RS=0; //根據規定,RS和R/W同時為低電平時,可以寫入指令
RW=0;
E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,
// 就是讓E從0到1發生正跳變,所以應先置"0"
_nop_();
_nop_(); //空操作兩個機器周期,給硬體反應時間
P0=dictate; //將數據送入P0口,即寫入指令或地址
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函數功能:指定字元顯示的實際地址
入口參數:x
***************************************************/
void WriteAddress(unsigned char x)
{
WriteInstruction(x|0x80); //顯示位置的確定方法規定為"80H+地址碼x"
}
/*****************************************************
函數功能:將數據(字元的標准ASCII碼)寫入液晶模塊
入口參數:y(為字元常量)
***************************************************/
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1; //RS為高電平,RW為低電平時,可以寫入數據
RW=0;
E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,
// 就是讓E從0到1發生正跳變,所以應先置"0"
P0=y; //將數據送入P0口,即將數據寫入液晶模塊
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函數功能:對LCD的顯示模式進行初始化設置
***************************************************/
void LcdInitiate(void)
{
delay(15); //延時15ms,首次寫指令時應給LCD一段較長的反應時間
WriteInstruction(0x38); //顯示模式設置:16×2顯示,5×7點陣,8位數據介面
delay(5); //延時5ms,給硬體一點反應時間
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38); //連續三次,確保初始化成功
delay(5);
WriteInstruction(0x0c); //顯示模式設置:顯示開,無游標,游標不閃爍
delay(5);
WriteInstruction(0x06); //顯示模式設置:游標右移,字元不移
delay(5);
WriteInstruction(0x01); //清屏幕指令,將以前的顯示內容清除
delay(5);

}
/******************************************************************************
函數功能:顯示小時
******************************************************************************/
void DisplayHour()
{
unsigned char i,j;
i=h/10; //取整運算,求得十位數字
j=h%10; //取余運算,求得各位數字
WriteAddress(0x44); //寫顯示地址,將十位數字顯示在第2行第5列
WriteData(digit[i]); //將十位數字的字元常量寫入LCD
WriteData(digit[j]); //將個位數字的字元常量寫入LCD

}
/******************************************************************************
函數功能:顯示分鍾
******************************************************************************/
void DisplayMinute()
{
unsigned char i,j;
i=m/10; //取整運算,求得十位數字
j=m%10; //取余運算,求得各位數字
WriteAddress(0x47); //寫顯示地址,將十位數字顯示在第2行第8列
WriteData(digit[i]); //將十位數字的字元常量寫入LCD
WriteData(digit[j]); //將個位數字的字元常量寫入LCD

}
/******************************************************************************
函數功能:顯示秒
******************************************************************************/
void DisplaySecond()
{
unsigned char i,j;
i=s/10; //取整運算,求得十位數字
j=s%10; //取余運算,求得各位數字
WriteAddress(0x4a); //寫顯示地址,將十位數字顯示在第2行第11列
WriteData(digit[i]); //將十位數字的字元常量寫入LCD
WriteData(digit[j]); //將個位數字的字元常量寫入LCD
}

/*********************************************************************
main function
***********************************************************************/
void main(void)
{
unsigned char i;
LcdInitiate(); //調用LCD初始化函數

TMOD=0x01; //使用定時器T0的模式1
TH0=(65536-46083)/256; //定時器T0的高8位設置初值
TL0=(65536-46083)%256; //定時器T0的低8位設置初值
EA=1; //開總中斷
ET0=1; //定時器T0中斷允許
TR0=1; //啟動定時器T0

count=0; //中斷次數初始化為0
s=0; //秒初始化為0
m=0; //分鍾初始化為0
h=0; //小時初始化為0

WriteAddress(0x03); //寫地址,從第1行第4列開始顯示
i=0; //從字元數組的第1個元素開始顯示
while(string[i]!='\0') //只要沒有顯示到字元串的結束標志'\0',就繼續
{
WriteData(string[i]); //將第i個字元數組元素寫入LCD
i++; //指向下一個數組元素
}
WriteAddress(0x46); //寫地址,將第二個分號顯示在第2行第7列
WriteData(':'); //將分號的字元常量寫入LCD
WriteAddress(0x49); //寫地址,將第二個分號顯示在第2行第10列
WriteData(':'); //將分號的字元常量寫入LCD
while(1) //無限循環
{
DisplayHour(); //顯示小時
delay(5); //給硬體一點反應時間
DisplayMinute(); //顯示分鍾
delay(5); //給硬體一點反應時間
DisplaySecond(); //顯示秒
delay(5); //給硬體一點反應時間
}
}
/*******************************************************
函數功能:定時器T0的中斷服務函數
********************************************************/
void Time0(void ) interrupt 1 using 1 //定時器T0的中斷編號為1,使用第1組工作寄存器
{
count++; //每產生1次中斷,中斷累計次數加1
if(count==20) //如果中斷次數計滿20次
{
count=0; //中斷累計次數清0
s++; //秒加1
}
if(s==60) //如果計滿60秒
{
s=0; //秒清0
m++; //分鍾加1
}
if(m==60) //如果計滿60分
{
m=0; //分鍾清0
h++; //小時加1
}
if(h==24) //如果計滿24小時
{
h=0; //小時清0
}
TH0=(65536-46083)/256; //定時器T0高8位重新賦初值
TL0=(65536-46083)%256; //定時器T0低8位重新賦初值
}
看看哪些用得上 就選擇下 改吧改吧 就是你的啦

⑵ 編寫51單片機實現液晶上字的循環顯示和移動程序

在1602的第一行 循環顯示 welcome to china
//用1602循環右移顯示"Welcome to China"
#include<reg52.h> //包含單片機寄存器的頭文件
#include<intrins.h> //包含_nop_()函數定義的頭文件
sbit RS=P2^0; //寄存器選擇位,將RS位定義為P2.0引腳
sbit RW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳
sbit E=P2^2; //使能信號位,將E位定義為P2.2引腳
sbit BF=P0^7; //忙碌標志位,,將BF位定義為P0.7引腳
unsigned char code string[ ]={"Welcome to China"};
/*****************************************************
函數功能:延時1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************************
函數功能:延時若干毫秒
入口參數:n
***************************************************/
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
/*****************************************************
函數功能:判斷液晶模塊的忙碌狀態
返回值:result。result=1,忙碌;result=0,不忙
***************************************************/
unsigned char BusyTest(void)
{
bit result;
RS=0; //根據規定,RS為低電平,RW為高電平時,可以讀狀態
RW=1;
E=1; //E=1,才允許讀寫
_nop_(); //空操作
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
result=BF; //將忙碌標志電平賦給result
E=0;
return result;
}
/*****************************************************
函數功能:將模式設置指令或顯示地址寫入液晶模塊
入口參數:dictate
***************************************************/
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1); //如果忙就等待
RS=0; //根據規定,RS和R/W同時為低電平時,可以寫入指令
RW=0;
E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,
// 就是讓E從0到1發生正跳變,所以應先置"0"
_nop_();
_nop_(); //空操作兩個機器周期,給硬體反應時間
P0=dictate; //將數據送入P0口,即寫入指令或地址
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函數功能:指定字元顯示的實際地址
入口參數:x
***************************************************/
void WriteAddress(unsigned char x)
{
WriteInstruction(x+0x80); //顯示位置的確定方法規定為"80H+地址碼x"
}
/*****************************************************
函數功能:將數據(字元的標准ASCII碼)寫入液晶模塊
入口參數:y(為字元常量)
***************************************************/
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1; //RS為高電平,RW為低電平時,可以寫入數據
RW=0;
E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,
// 就是讓E從0到1發生正跳變,所以應先置"0"
P0=y; //將數據送入P0口,即將數據寫入液晶模塊
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函數功能:對LCD的顯示模式進行初始化設置
***************************************************/
void LcdInitiate(void)
{
delay(15); //延時15ms,首次寫指令時應給LCD一段較長的反應時間
WriteInstruction(0x38); //顯示模式設置:16×2顯示,5×7點陣,8位數據介面
delay(5); //延時5ms
WriteInstruction(0x0f); //顯示模式設置:顯示開,有游標,游標閃爍
delay(5);
WriteInstruction(0x06); //顯示模式設置:游標右移,字元不移
delay(5);
WriteInstruction(0x01); //清屏幕指令,將以前的顯示內容清除
delay(5);
}
void main(void) //主函數
{
unsigned char i;
LcdInitiate(); //調用LCD初始化函數
delay(10);
while(1)
{
WriteInstruction(0x01);//清顯示:清屏幕指令
WriteAddress(0x00); // 設置顯示位置為第一行的第5個字
i = 0;
while(string[i] != '\0')
{ // 顯示字元
WriteData(string[i]);
i++;
delay(150);
}
for(i=0;i<4;i++)
delay(250);

}

}

⑶ 1602液晶顯示的單片機為什麼屏幕亮但不顯示數字

//單片機驅動1602液晶顯示的的模擬,可以參考一下。

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit E=P3^2;

sbit RW=P3^3;

sbit RS=P3^4;

void delay() //延時函數

{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

bit Busy(void)

{

bit busy_flag = 0;

RS = 0;

RW = 1;

E = 1;

delay();

busy_flag = (bit)(P1 & 0x80);

E = 0;

return busy_flag;

}

void wcmd(uchar del)

{

while(Busy());

RS = 0;

RW = 0;

E = 0;

delay();

P1 = del;

delay();

E = 1;

delay();

E = 0;

}

void wdata(uchar del)

{

while(Busy());

RS = 1;

RW = 0;

E = 0;

delay();

P1 = del;

delay();

E = 1;

delay();

E = 0;

}

void L1602_init(void)

{

wcmd(0x38);//設置16*2顯示,5*7點陣,8位數據口

wcmd(0x0c);

wcmd(0x06);

wcmd(0x01);

}

void L1602_char(uchar hang,uchar lie,char sign)

{

uchar a;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

a = a + lie - 1;

wcmd(a);

wdata(sign);

}

void L1602_string(uchar hang,uchar lie,uchar *p)

{

uchar a,b=0;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

a = a + lie - 1;

while(1)

{

wcmd(a++);

b++;

if((*p == '')||(b==16)) break;

wdata(*p);

p++;

}

}

void Main()

{

L1602_init();

L1602_string(1,1,"0123456789 ");

L1602_string(2,1," ABCDEFGHIJ ");

L1602_char(2,15,'O');

L1602_char(2,16,'K');

while(1);

}

⑷ 怎麼把單片機顯示到電視上

1、首先編好液晶顯示屏的數字型檔。
2、其次按鍵按下時顯示相應的告敗讓數字。襪局
3、最後從遙枯仿控器獲取信號並將其輸出顯示在電視屏幕上即可。

⑸ 單片機數碼管動態掃描顯示,時間這樣設置才能更好的顯示一連串數在屏幕上,有沒有數碼規律、

要根據數碼管的數量來定的。
但是,一般來說,每一位數碼管需要一定的顯示時間,也就是說,你輸出一位數碼管的數據點亮這個數碼管之後,需要一定的時間才能熄滅它並點亮下一個數碼管,而不能一輸出就馬上熄滅它,否則亮度會非常低。
另外,全部數碼管全部掃描一遍的總時間最好不要超過25mS,否則閃爍會比較嚴重,通常總的掃描頻率要在60Hz以上,才看不到閃爍。
比如說你要掃描8位數碼管,那麼可以讓每一位數碼管點亮1mS,這樣全部顯示一遍就大約是8mS或稍微多一點點(算上顯示處理的指令執行時間),此時的總掃描頻率就是125Hz左右,這樣的話,即能保證亮度,又看不到閃爍。

⑹ 怎麼用單片機顯示自己的名字和學號

只要一塊128*64或者128*32的LED屏幕就可以顯示了,1602驅動的常式很多,使用字模工具生成字模數組調用即可。逐一顯示或者並排顯示。

閱讀全文

與單片機讓屏幕顯示數字相關的資料

熱點內容
上海不動產權證怎麼加密碼 瀏覽:583
linux推薦版本 瀏覽:572
安卓網格布局有什麼特點 瀏覽:322
生化危機用什麼app看 瀏覽:914
布穀鳥搜索演算法matlab 瀏覽:136
伺服器的燈如何設置 瀏覽:862
單片機控制門流程圖 瀏覽:304
滬漂女程序員跳槽 瀏覽:306
百度石榴演算法指的是 瀏覽:784
怎麼將文件壓縮得盡可能小 瀏覽:447
linux開發常用命令 瀏覽:831
我的世界java版如何進入伺服器 瀏覽:897
如何把jpg轉換pdf格式 瀏覽:290
華為p10plus圖片加密 瀏覽:369
宏傑文件夾加密密碼忘了 瀏覽:620
dos命令rd 瀏覽:667
怎麼把wps上的演算法格式改了 瀏覽:806
微信文件文件夾網盤 瀏覽:842
html5pdf教程 瀏覽:648
android聊天鍵盤 瀏覽:914