日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简易PROTUES的定时器仿真

發布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简易PROTUES的定时器仿真 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

仿真示意圖:

?單片機程序:

#include ?<REG51.H>
#include ?<intrins.h>
#include ?<math.h>
#define ? uchar unsigned char
#define ? uint unsigned int

sbit RS=P2^6;
sbit E=P2^7;
sbit key0=P2^0;
sbit key1=P2^3;
sbit pluse=P3^2;
float data_ad;
float time_0;
float distance=1000;
float speed=0;
unsigned char count; ? //定義變量統計中斷累計次數
float s,m,h; ? //定義變量儲存秒、分鐘和小時
uchar FirstFlag;
void shuchu(void);
void _delay_ms(uchar z)
{
? uint x,y;
? for(x=z;x>0;x--)
? ? for(y=110;y>0;y--);
}

void wr_commamd_lcd1602( uchar data_lcd1602)
{ ? ??
? E=0;
? RS=0;
? P0=data_lcd1602;
? E=1;
? E=0;
? _delay_ms(15);
}


void wr_data_lcd1602( uchar data_lcd1602)
{
? E=0;
? RS=1;
? P0=data_lcd1602;
? E=1;
? E=0;
? _delay_ms(10);
}

void lcd1602_init( )
{
? wr_commamd_lcd1602(0x01);
? wr_commamd_lcd1602(0x02);
? wr_commamd_lcd1602(0x06);
? wr_commamd_lcd1602(0x0F);
? wr_commamd_lcd1602(0x14);
? wr_commamd_lcd1602(0x3c);
? wr_commamd_lcd1602(0xc0);
}

void init_timer()
{
? ? TMOD=0x01; ? ? ? ? ? ? ? ?//使用定時器T0的模式1
?? ?TH0=0XFC; ? ?//定時器T0的高8位設置初值
?? ?TL0=0X18; ? ?//定時器T0的低8位設置初值
?? ?EA=1; ? ? ? ? ? ? ? ? ? ? //開總中斷
?? ?ET0=1; ? ? ? ? ? ? ? ? ? ?//定時器T0中斷允許
?? ?TR0=1; ? ? ? ? ? ? ? ? ? ?//啟動定時器T0
?? ?EX0=1;

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

void main( )
{?
? uchar data_test=123;
? uint ?flag1;
? flag1=0;
? key0=0;
? key1=0;
? init_timer();
? lcd1602_init( );//液晶初始化

? while(1)
? {?

}

}

?void shuchu()
?{
?uint ?i,j;
?? ? ?time_0=m+s/1000;
?? ? ? speed=(distance/time_0);
? ? ? wr_commamd_lcd1602(0xc0);//設定光標位置
? ? ? wr_data_lcd1602('T');//D
? ? ? wr_data_lcd1602('=');//=
? ? ?

?? ? i=time_0/1;
? ? ? wr_data_lcd1602(0x30+i);//整數 ?1.234
? ? ? wr_data_lcd1602('.');//小數點
? ? ? i=time_0*10;
? ? ? i=i%10;
? ? ? wr_data_lcd1602(0x30+i);//0.1
? ? ? i=time_0*100;
? ? ? i=i%10;
? ? ? wr_data_lcd1602(0x30+i);//0.01
? ? ? i=speed*1000;
? ? ? i=i%10;
? ? ? wr_data_lcd1602(0x30+i);//0.001 ?
? ? ??
// ? ? ?wr_data_lcd1602(0x00);//空格
? ? ? //wr_data_lcd1602(0x00);//空格
? ? ? wr_data_lcd1602('v');//v
? ? ? wr_data_lcd1602('=');//=
? ? ? j=(int)speed/1000;
? ? ? wr_data_lcd1602(0x30+j);//整數 ?1.234
?? ? ?i=((int)speed/100)%10;
?? ? ?wr_data_lcd1602(0x30+i);//整數 ?1.234
?? ? ?i=((int)speed/10)%10;
?? ? ?wr_data_lcd1602(0x30+i);//整數 ?1.234
?? ? ?i=((int)speed%10);
?? ? ?wr_data_lcd1602(0x30+i);//整數 ?1.234
? ? ? wr_data_lcd1602('.');//小數點
? ? ? i=speed*10;
? ? ? i=i%10;
? ? ? wr_data_lcd1602(0x30+i);//0.1
? ? ? i=speed*100;
? ? ? i=i%10;
? ? ? wr_data_lcd1602(0x30+i);//0.01
// ? ? ?i=speed*1000;
// ? ? ?i=i%10;
// ? ? ?wr_data_lcd1602(0x30+i);//0.001 ?
}


void T() ?interrupt 0
{

? ?FirstFlag++;
? ?while(pluse==0);
? ?if(FirstFlag >= 2)
?? ?{
?? ??? ?FirstFlag = 0;
?? ??? ?shuchu();

?? ??? ?}

}

/*******************************************************
函數功能:定時器T0的中斷服務函數
********************************************************/
?void Time0(void ) interrupt 1 using 1 //定時器T0的中斷編號為1,使用第1組工作寄存器
? {

? if(FirstFlag == 1)
?? ?{
?? ??? ? ? ? ? ?s++; ? ? ?//秒加1?? ??? ??? ??? ??
?? ??? ? ?if(s==1000) ? //如果計滿60秒
?? ??? ??? ? {
?? ??? ??? ? ?s=0; ? ? //秒清0
?? ??? ??? ? ?m++; ? ? //分鐘加1
?? ??? ? ? ?}
?? ? ??? ?if(m==60) ? ?//如果計滿60分
?? ??? ? ? {
?? ??? ??? ? ? m=0; ? //分鐘清0?
//?? ??? ??? ? ? h++; ? ?//小時加1
?? ??? ? ? ?}
//?? ? ? ? if(h==99) ?//如果計滿24小時
//?? ??? ? ? {
//?? ??? ??? ? ? h=0; ? //小時清0
//?? ??? ? ? }
?? ? ? TH0=0XFC; ? //定時器T0高8位重新賦初值
?? ??? ?TL0=0X18; ? //定時器T0低8位重新賦初值?? ??? ?
? } ?

?? ? }

想要源文件請到資料中下載(名稱定時器仿真)

總結

以上是生活随笔為你收集整理的简易PROTUES的定时器仿真的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。