|
喜歡研究單片機(jī)定時(shí)器的可以來(lái)看一下,代碼里有單片機(jī)定時(shí)器初始化的代碼
22.png (46.54 KB, 下載次數(shù): 45)
下載附件
2019-12-25 16:01 上傳
22.png (46.54 KB, 下載次數(shù): 42)
下載附件
2019-12-25 16:02 上傳
0.jpg (36.94 KB, 下載次數(shù): 64)
下載附件
2019-12-25 16:07 上傳
單片機(jī)源程序如下:
- #include <AT89X52.H>
- #define uint unsigned int //宏定義無(wú)符號(hào)整型數(shù)據(jù)
- #define uchar unsigned char //宏定義無(wú)符號(hào)字符型數(shù)據(jù)
- sbit key1=P3^6; //按鍵
- sbit led=P1^0; //燈
- sbit ledc=P1^1; //燈
- uchar Cntus=0,Cnt10ms=0,Cnt1s=0,Cnt1min=0;//中斷計(jì)時(shí)變量
- bit stop=0; //停止標(biāo)志
- void display(); //顯示程序聲明
- void keyscan(); //按鍵掃描程序聲明
- /**************************************
- 1602液晶
- **************************************/
- sbit RS = P2^5;
- sbit RW = P2^6;
- sbit E = P2^7;
- /**********************************************************
- 函數(shù)說(shuō)明: 延時(shí)程序
- **********************************************************/
- void delay(uchar t)
- {
- uint j;
- uchar i;
- for(i=0;i<t;i++)
- for(j=0;j<1000;j++);
- }
- /**************************************
- 短延時(shí)
- **************************************/
- void delay5ms()
- {
- uchar i,v,k;
- for(i=1;i>0;i--)
- for(v=168;v>0;v--)
- for(k=22;k>0;k--);
- }
- /**************************************
- 寫(xiě)指令
- **************************************/
- void lcd_Write_com(uchar com)
- {
- RS=0; //定義指令寄存器
- RW=0; //寫(xiě)允許
- P0=com; //寫(xiě)指令
- delay5ms(); E=1; //片選端上拉
- delay5ms(); E=0; //下降沿鎖存
- }
- /**************************************
- 寫(xiě)數(shù)據(jù)
- **************************************/
- void lcd_write_date(uchar date)
- {
- RS=1; //定義數(shù)據(jù)寄存器
- RW=0; //寫(xiě)允許
- P0=date; //寫(xiě)數(shù)據(jù)
- delay5ms(); E=1; //片選端上拉
- delay5ms(); E=0; //下降沿鎖存
- }
- /**************************************
- 顯示程序
- **************************************/
- void dis_lcd1602(uchar x,uchar y,uchar dat)
- {
- uchar add;
- if(y==1) add=(0x80+x);
- if(y==2) add=(0xc0+x);
- lcd_Write_com(add); //寫(xiě)指令
- lcd_write_date(dat); //寫(xiě)數(shù)據(jù)
- }
- /**************************************
- 液晶初始化
- **************************************/
- void lcd1602_init()
- {
- lcd_Write_com(0x38); //設(shè)置8位格式,2行,5*7
- lcd_Write_com(0x01); //清屏
- lcd_Write_com(0x0c); //整體顯示,關(guān)光標(biāo),不閃爍
- lcd_Write_com(0x06); //設(shè)定輸入方式,增量不移位
- lcd_Write_com(0x80); //初始坐標(biāo)
- }
- /**************************************
- 液晶顯示漢字程序
- **************************************/
- void hz_lcdDis(uchar x,uchar y,uchar *p) //漢字顯示
- {
- uchar i=0,temp;
- if(x)temp = 0x40; else temp = 0;
- for(i=y;*p!='\0';i++,p++)
- {
- lcd_Write_com(i|0x80+temp);
- lcd_write_date(*p);
- delay5ms();
- }
- }
- /**************************************
- 液晶顯示數(shù)字程序
- **************************************/
- void num_lcdDis(uchar X,uchar Y,uint num,uchar n)
- {
- uint i=0,temp,hang;
- n +=1;
- if(X)hang = 0x40;else hang = 0;
- for(i=(n-1);i>0;i--)
- {
- lcd_Write_com((i+Y-1)|0x80+hang); //從個(gè)位開(kāi)始顯示
- temp = num%10+0x30;
- lcd_write_date(temp);
- delay5ms();
- num/=10;
- }
- }
- void num_lcdDis1_1(uint num)//input 電壓 整數(shù)部分
- {
- uint i,temp,x;
- x=5;
- for(i=0;i<2;i++)
- { x--;
- lcd_Write_com(0x80+x); //寫(xiě)指令
- temp = num%10+0x30;
- lcd_write_date(temp);// 寫(xiě)數(shù)據(jù)
- num/=10;
- }
- }
- /**************************************
- 液晶顯示數(shù)字程序
- **************************************/
- void num_lcdDisx(uchar X,uchar Y,uint num,uchar n)
- {
- uint i=0,temp,hang;
- n +=1;
- if(X)hang = 0x40;
- else hang = 0;
- for(i=(n-1);i>0;i--)
- {
- lcd_Write_com((i+Y-1)|0x80+hang);//從個(gè)位開(kāi)始顯示
- temp = num%10+0x30;
- lcd_write_date(temp);
- delay5ms();
- num/=10;
- }
- }
- /***********按鍵掃描程序****************/
- void keyscan()
- {
- static uint count2=0,count1=0; //計(jì)數(shù)變量
- static bit key_sign=0; //按鍵自鎖標(biāo)志
- if(key1==0) //檢測(cè)按鍵為0
- { delay(50);
- if(key1==0){
- count1++;
- stop=!stop;
-
- }
- //計(jì)數(shù)延時(shí)消抖
-
- }
- else
- {
- count1=0; //計(jì)數(shù)變量清0
- }
- }
- /***********定時(shí)器初始化程序****************/
- void Timer0Init(void) //2.5毫秒@11.0592MHz
- {
- TMOD = 0x01; //設(shè)置定時(shí)器模式
- TL0 = 0x00; //設(shè)置定時(shí)初值
- TH0 = 0xF7; //設(shè)置定時(shí)初值
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- EA=1; //開(kāi)總中斷
- ET0=1; //開(kāi)定時(shí)器0中斷
- }
- /***************主程序****************/
- void main()
- {
- int cm=0;
- Timer0Init(); //定時(shí)器初始化
- lcd1602_init();//液晶初始化
- hz_lcdDis(0,0,"Timer system"); //啟動(dòng)電源
- hz_lcdDis(1,7,": :"); //歡迎你
- led=1;
- while(1)
- {
- // Cnt1min Cnt1s Cnt10ms
- num_lcdDis(1,5,Cnt1min,2);
- num_lcdDis(1,8,Cnt1s,2);
- num_lcdDis(1,11,Cnt10ms,2);
- if(Cnt1min>9){
- led=0;
- }
-
- keyscan(); //按鍵掃描
- }
- }
- /**************中斷服務(wù)程序*****************/
- void timer0() interrupt 1 //2.5毫秒@11.0592MHz
- {
- TL0 = 0x00; //設(shè)置定時(shí)初值
- TH0 = 0xF7; //設(shè)置定時(shí)初值
- Cntus++; //中斷變量Cntus自+1
- if(Cntus>=4) //10ms
- {
- Cntus=0; //清0
- if(stop==1) //啟動(dòng)
- Cnt10ms++; //10毫秒計(jì)數(shù)
- if(Cnt10ms>=100)
- {
- Cnt10ms=0;
- ledc=!ledc;
- Cnt1s++;
- //秒計(jì)數(shù)
- if(Cnt1s>=60)
- {
- Cnt1s=0;
- Cnt1min++; //分計(jì)數(shù)
- if(Cnt1min>=100)
- Cnt1min=0;
- }
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
毫秒級(jí)的秒表.zip
(131.34 KB, 下載次數(shù): 70)
2019-12-25 16:04 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|