久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于51單片機的1602刷屏顯示
[打印本頁]
作者:
ssy111222ssy
時間:
2018-6-11 14:43
標題:
基于51單片機的1602刷屏顯示
/*描述: *
* *
* 上電后液晶屏先顯示信息,接著按下S2,定時開始,再次按下 *
* *
* S2暫停,第3次按下顯示累積計時,第4次按下暫停計時,任何時候按下S3*
* *
* 計數清零。 *
* *
* *
************************************************************************/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar KeyCount=0;
sbit S2 = P3^0;
sbit S3 = P3^1;
sbit BEEP = P2^3; //蜂鳴器
uchar code cdis1[ ] = {" STOPWATCH 0 "};
uchar code cdis2[ ] = {" QX-MCS51 "};
uchar code cdis3[ ] = {"TIME "};
uchar code cdis4[ ] = {" BEGIN COUNT 1 "};
uchar code cdis5[ ] = {" PAUSE COUNT 2 "};
uchar code cdis6[ ] = {" BEGIN COUNT 3 "};
uchar code cdis7[ ] = {" PAUSE COUNT 4 "};
uchar code cdis8[ ] = {" "};
sbit LCD_RS = P3^5;
sbit LCD_RW = P3^6;
sbit LCD_EN = P3^4;
sbit dula=P2^6;
sbit wela=P2^7;
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
uchar display[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar display2[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
/*********************************************************
延時函數
*********************************************************/
void Delay(uint num)//延時函數
{
while( --num );
}
/*********************************************************
蜂鳴器響一聲
**********************************************************/
void beep()
{
unsigned char y;
for (y=0;y<180;y++)
{
BEEP=!BEEP; //BEEP取反
Delay(70);
}
BEEP=1; //關閉蜂鳴器
}
/*********************************************************
延時函數1
*********************************************************/
void delay1(int ms)
{
unsigned char n;
while(ms--)
{
for(n = 0; n<250; n++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/**********************************************************
* *
*寫指令數據到LCD *
*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 *
* *
**********************************************************/
void lcd_wcmd(uchar cmd)
{
// while(lcd_busy());
LCD_RS = 0;
// LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
Delay(10);
}
/**********************************************************
* *
*寫顯示數據到LCD *
*RS=H,RW=L,E=高脈沖,D0-D7=數據。 *
* *
**********************************************************/
void lcd_wdat(uchar dat)
{
// while(lcd_busy());
LCD_RS = 1;
// LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
Delay(10);
}
/**********************************************************
* *
* LCD初始化設定 *
* *
**********************************************************/
void lcd_init()
{
LCD_RW = 0;
dula=0;
wela=0;
delay1(15);
lcd_wcmd(0x01); //清除LCD的顯示內容
lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數據
delay1(5);
lcd_wcmd(0x38);
delay1(5);
lcd_wcmd(0x38);
delay1(5);
lcd_wcmd(0x0c); //開顯示,不顯示光標
delay1(5);
lcd_wcmd(0x01); //清除LCD的顯示內容
delay1(5);
}
/**********************************************************
* *
* 設定顯示位置 *
* *
**********************************************************/
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80); //數據指針=80+地址變量
}
/********************************************************
顯示函數
*********************************************************/
void play()
{
uchar i;
for(i=0;i<6;i++)
{
display2[i]=display[i]+0x30;
}
display2[7]=display[6]/10+0x30; //時單位數據處理
display2[6]=display[6]%10+0x30;
lcd_pos(0x45);
lcd_wdat(display2[7]); //顯示時
lcd_wdat(display2[6]);
lcd_wdat(0x3a); //顯示':'
lcd_wdat(display2[5]); //顯示分
lcd_wdat(display2[4]);
lcd_wdat(0x3a); //顯示':'
lcd_wdat(display2[3]); //顯示秒
lcd_wdat(display2[2]);
lcd_wdat(0x3a); //顯示':'
lcd_wdat(display2[1]); //顯示毫秒
lcd_wdat(display2[0]);
}
/********************************************************
主函數
*********************************************************/
main()
{
uchar m;
TMOD=0x01;
TH0=0xdc; TL0=0x00; //50ms定時
EA=1; ET0=1;
lcd_init();
lcd_pos(0x00); //設置顯示位置為第一行
for(m=0;m<16;m++)
lcd_wdat(cdis1[m]); //顯示字符
lcd_pos(0x40); //設置顯示位置為第二行
for(m=0;m<16;m++)
{
lcd_wdat(cdis2[m]); //顯示字符
delay1(60);
}
delay1(100);
lcd_pos(0x40); //設置顯示位置為第二行
for(m=0;m<16;m++)
lcd_wdat(cdis3[m]);
while(1)
{
if(S2==0)
{
KeyCount++; //計數
beep();
delay1(100);
switch (KeyCount)
{
case 1:
TR0=1; //啟動中斷
lcd_pos(0x00);
for(m=0;m<16;m++)
lcd_wdat(cdis4[m]);
break;
case 2:
TR0=0; //停止中斷
lcd_pos(0x00);
for(m=0;m<16;m++)
lcd_wdat(cdis5[m]);
break;
case 3:
TR0=1; //啟動中斷
lcd_pos(0x00);
for(m=0;m<16;m++)
lcd_wdat(cdis6[m]);
break;
case 4:
TR0=0; //停止中斷
lcd_pos(0x00);
for(m=0;m<16;m++)
lcd_wdat(cdis7[m]);
break;
default:
TR0=0; //停止中斷
break;
}
}
if(S3==0)
{
TR0=0; //停止中斷
KeyCount=0;
for(m=0;m<8;m++)
display[m]=0x00; //計時單元清零
lcd_pos(0x00); //設置顯示位置為第一行
for(m=0;m<16;m++)
lcd_wdat(cdis1[m]);
beep();
delay1(100);
}
play();
}
}
/*********************************************************
* *
* Time0中斷函數 *
* *
**********************************************************/
void Time0(void) interrupt 1 using 0
{
TH0=0xdc; //10ms定時
TL0=0x00;
display[0]++; //0.01S
if(display[0]==10)
{
display[0]=0;
display[1]++; //0.1S
}
if(display[1]==10)
{
display[1]=0;
display[2]++; //秒個位
}
if(display[2]==10)
{
display[2]=0;
display[3]++; //秒十位
}
if(display[3]==6)
{
display[3]=0;
display[4]++; //分個位
}
if(display[4]==10)
{
display[4]=0;
display[5]++; //分十位
}
if(display[5]==6)
{
display[5]=0;
display[6]++; //時
}
if(display[6]==24)
{
display[6]=0;
}
}
/*********************************************************/
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲一区视频在线
|
在线看日韩
|
欧美日韩中文在线
|
国产高清精品一区二区三区
|
龙珠z国语版在线观看
|
久久这里有精品
|
色妹子综合网
|
日韩三
|
精品亚洲一区二区三区
|
亚洲免费一
|
久久国产精品视频观看
|
亚洲国产精品成人综合久久久
|
亚洲视频不卡
|
福利社午夜影院
|
欧美成人精品一区
|
99精品电影
|
一区二区福利视频
|
久久久日韩精品一区二区三区
|
亚洲美女一区二区三区
|
国产成人精品一区二区三区四区
|
www.黄色片视频
|
成人免费视频网站在线看
|
日本福利在线
|
国产精品成人品
|
超碰欧美
|
一级黄色毛片子
|
日韩欧美在线观看
|
国产精品久久久久久久久久久免费看
|
国产高清精品一区二区三区
|
很黄很污的网站
|
久久久一区二区三区
|
一级片网址
|
国产成人精品一区二区三区四区
|
国产区在线看
|
在线视频亚洲
|
成人激情视频在线
|
自拍偷拍亚洲欧美
|
请别相信他免费喜剧电影在线观看
|
国产免费观看久久黄av片涩av
|
国产精品伦理一区二区三区
|
精品网站999
|