亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
51單片機(jī)為基礎(chǔ)利用12864液晶利用兩個(gè)中斷制作的計(jì)時(shí)器和定時(shí)器 源程序注釋完整
[打印本頁(yè)]
作者:
闊少
時(shí)間:
2019-11-12 20:13
標(biāo)題:
51單片機(jī)為基礎(chǔ)利用12864液晶利用兩個(gè)中斷制作的計(jì)時(shí)器和定時(shí)器 源程序注釋完整
這是我在學(xué)習(xí)了中斷和LCD12864液晶后,將兩者結(jié)合寫出來(lái)的程序,實(shí)現(xiàn)了999倒計(jì)時(shí)功能,和計(jì)數(shù)器的功能。程序注釋完整可用,適合學(xué)51單片機(jī)的新手,希望大家多多參考學(xué)習(xí)哦~
單片機(jī)源程序如下:
/*看書的時(shí)候要十分重點(diǎn)去看寄存器,看到前面我剛開始也是看完之后似懂非懂,我就一直看一直看反復(fù)記憶,等覺(jué)得自己差不多了就開始看中斷程序,看了程序之后,我的天哪其實(shí)定時(shí)器初始化要寫的東西并不多,程序比那些復(fù)雜的文字要簡(jiǎn)單多了,再加上程序后面的分析,我差不多就理解了,之后就用四位數(shù)碼管編寫了一個(gè)分秒程序,程序沒(méi)有錯(cuò)誤沒(méi)有警告但是運(yùn)行不了,找?guī)熜挚催^(guò)之后他叫我不要深究在這里讓我去做定時(shí)器液晶,現(xiàn)在想想可能程序還是有點(diǎn)問(wèn)題等有空再深究一下,不然怎么別人的可以用數(shù)碼管而我的不行呢。
我把程序?qū)懗鰜?lái)之后不行,我是這么寫顯示的放在主函數(shù)中
Write1_XY_string(2,0,"shi");
我知道可能是這里有了問(wèn)題可我不會(huì)改,不知道如何下手,楊銘師兄就幫我改成了
Set1_XY(2,0);
write_date(0x30+shi/10);
就可以運(yùn)行了,因?yàn)檫@些要轉(zhuǎn)化成十進(jìn)制的數(shù)要加上0x30所以要用這樣寫來(lái)轉(zhuǎn)換。
后來(lái)師兄想讓我做兩個(gè)定時(shí)器,一個(gè)是時(shí)鐘一個(gè)是定時(shí)的,他把思路告訴我了,后來(lái)我寫出來(lái)程序是OK的,其實(shí)理解了中斷之后多一個(gè)少一個(gè)都是一樣的。
我在寫的時(shí)候用上了那些C語(yǔ)言的符號(hào)
else if(miao1==0&&fen1!=0)
我感覺(jué)這些很好用的,之前我是不會(huì)用的,慢慢的突然就想到就會(huì)用了哈哈,定時(shí)器我是寫程序的時(shí)候真的是走的挺快的因?yàn)闆](méi)有出現(xiàn)什么錯(cuò)誤,所以我也不知道總結(jié)點(diǎn)什么,看書的時(shí)候多看看重點(diǎn)“寄存器”吧一定要看懂才行的。
我會(huì)繼續(xù)加油的!*/
/***** 液晶12864頭文件 *****/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P2^4; //片選信號(hào)
sbit LCD_RW=P2^5; //數(shù)據(jù)信號(hào)
sbit LCD_EN=P2^6; //時(shí)鐘信號(hào)
sbit LCD_PSB=P2^7; //串、并行選擇信號(hào)
uchar shi=00,fen=00,miao=00,num,shi1=99,fen1=99,miao1=99,num1;
/*延時(shí)函數(shù) 延時(shí)xms*/
void delay(uchar xms)
{
uchar x,y;
for(x=xms;x>0;x--)
for(y=12;y>0;y--);
}
/*以串行協(xié)議把數(shù)據(jù)按位發(fā)送,相當(dāng)于使用并行時(shí)接通八個(gè)DI口*/
void send_bit(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
LCD_RW=((byte<<i)&0x80);
LCD_EN=0; //不加延時(shí),串口中每輸送一個(gè)數(shù)據(jù)都有要有個(gè)跳變沿,因此速度很快不需延時(shí)
LCD_EN=1;
}
delay(5);
}
/*寫串口命令函數(shù) */
void write_com(uchar com)
{
LCD_RS=1; //串口中只要進(jìn)行數(shù)據(jù)操作RS就將拉高
send_bit(0xf8); //第一字節(jié)輸入寫指令
send_bit(com&0xf0); //第二字節(jié)發(fā)送高四位
send_bit((com<<4)&0xf0); //第三字節(jié)發(fā)送低四位
delay(5);
LCD_RS=0;
}
/*寫數(shù)據(jù)命令函數(shù)*/
void write_date(uchar date)
{
LCD_RS=1;
send_bit(0xfa); //發(fā)送數(shù)據(jù)識(shí)別碼
send_bit(date&0xf0); //發(fā)送高四位
send_bit((date<<4)&0xf0); //發(fā)送低四位
delay(5);
LCD_RS=0;
}
/*********液晶初始化*********/
void lcd_init()
{
LCD_PSB=0; //串口
LCD_EN=0;
write_com(0x30); //基本指令操作 //可加延時(shí)也可不加,一般來(lái)說(shuō)液晶都是穩(wěn)定的
write_com(0x0c); //開顯示,關(guān)光標(biāo),反白關(guān)
write_com(0x06); //設(shè)置顯示格式,光標(biāo)位置
write_com(0x01); //清除顯示,將DDRAM的地址計(jì)數(shù)器歸零
}
///*********設(shè)定顯示位置************/
void Set1_XY(uchar X, uchar Y)
{
switch(X)
{
case 1:write_com(0x80+Y); break; //當(dāng)X為1時(shí)執(zhí)行此程序,在第一行輸入
case 2:write_com(0x90+Y); break; //第二行
case 3:write_com(0x88+Y); break; //等三行
case 4:write_com(0x98+Y); break; //第四行
}
}
//
///************寫字符串***************/
//
void Write1_XY_string(uchar X, uchar Y, uchar *str)
{
uchar temp;
Set1_XY(X,Y);
temp=*str;
while(temp!=0)
{
write_date(temp); //輸出字符
temp=*(++str);
}
}
//
////**************************************************//
//
///************液晶顯示*************/
//
void display1()
{
Write1_XY_string(1,0,"北京時(shí)間,");
Write1_XY_string(2,0," ");
Write1_XY_string(3,0,"天氣陰");
Write1_XY_string(4,0," ");
}
void main()
{
TMOD=0X10; //設(shè)置定時(shí)器工作方式
TH0=(65536-45872)/256; //裝初值
TL0=(65536-45872)%256;
TH1=(65536-45872)/256; //裝初值
TL1=(65536-45872)%256;
EA=1; //全局中斷,打開全局中斷
ET0=1; //定時(shí)器中斷允許位 ,打開T1中斷
ET1=1;
TR0=1; //啟動(dòng)定時(shí)器0.INT1電平由高到低
TR1=1;
lcd_init(); //調(diào)用
display1();
while(1)
{
// Write1_XY_string(2,0,"shi");
// Write1_XY_string(2,2,":");
// Write1_XY_string(2,3,"fen");
// Write1_XY_string(2,5,":");
// Write1_XY_string(2,6,"miao/10");
Set1_XY(2,0);
write_date(0x30+shi/10);
write_date(0x30+shi%10);
Set1_XY(2,2);
write_date(':');
Set1_XY(2,3);
write_date(0x30+fen/10);
write_date(0x30+fen%10);
Set1_XY(2,5);
write_date(':');
Set1_XY(2,6);
write_date(0x30+miao/10);
write_date(0x30+miao%10);
//********************************************//
Set1_XY(4,0);
write_date(0x30+shi1/100);
write_date(0x30+shi1%100/10);
write_date(0x30+shi1%10);
Set1_XY(4,2);
write_date(':');
Set1_XY(4,3);
write_date(0x30+fen1/100);
write_date(0x30+fen1%100/10);
write_date(0x30+fen1%10);
Set1_XY(4,5);
write_date(':');
Set1_XY(4,6);
write_date(0x30+miao1/100);
write_date(0x30+miao1%100/10);
write_date(0x30+miao1%10);
}
}
void time()interrupt 1
{
TH0=(65536-45872)/256; //重裝初值
TL0=(65536-45872)%256;
num++;
if(num==20)
{
num=0;
miao++;
if(miao==60)
{
fen++;
miao=0;
if(fen==60)
{
shi++;
fen=0;
if(shi==24)
{
shi=0;
}
}
}
}
}
//************************************************************//
void time1()interrupt 3
{
TH1=(65536-45872)/256; //重裝初值
TL1=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
if(miao1!=0)
{
miao1--;
}
else if(miao1==0&&fen1!=0)
{
fen1--;
}
else if(fen1==0&&shi1!=0)
{
shi1--;
}
if(shi1==0)
{
shi1=99;
fen1=99;
miao1=99;
}
}
}
復(fù)制代碼
以上程序51hei提供下載:
中斷液晶兩個(gè)定時(shí)器.zip
(34.85 KB, 下載次數(shù): 22)
2019-11-12 20:11 上傳
點(diǎn)擊文件名下載附件
可用,內(nèi)容精煉,注釋完整,新老手都適合參考
下載積分: 黑幣 -5
作者:
楊德金
時(shí)間:
2019-11-12 21:12
謝謝 共享
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1