欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
求解答:用proteus仿真實現時鐘(幫忙看下代碼,已寫好了但是顯示不對
[打印本頁]
作者:
起風了1112
時間:
2020-3-24 11:36
標題:
求解答:用proteus仿真實現時鐘(幫忙看下代碼,已寫好了但是顯示不對
1585020856(1).jpg
(34.82 KB, 下載次數: 31)
下載附件
2020-3-24 11:37 上傳
代碼:
/*********************************************************************************************************************
程序名稱:8位數碼管時鐘程序
函數功能:在8位數碼管上顯示包含小時,分鐘,秒鐘的C語言程序
程序版本:V1.0
調試狀態:成功
調試時間:2014.10.10
定時器初值計算方法:【16進制】65535-[(晶振頻率/12)/(1秒/定時的時間)]
**********************************************************************************************************************/
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
/*********************************************************************************************************************/
//函數申明
void data_deal(); //數據處理函數
void delay(uchar timer);//延時函數
void H_M_S_circle();//時鐘時分秒循環函數
void display();//送顯示函數
/*********************************************************************************************************************/
unsigned char code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
// 0 1 2 3 4 5 6 7 8 9
};
/*********************************************************************************************************************/
//全局變量申明
uchar time_flag;
uchar Hour=0,Min=0,second=0;
uchar DispBuf[8]; //定義顯示緩沖區——待顯示的數據(由定時中斷程序自動掃描),全局變量
/*********************************************************************************************************************/
void main()
{
//啟動定時器
TMOD |= 0x01; //選擇定時器的工作方式(00表示13位定時計數器,01表示16位定時計數器,10表示8位定時計數器,11停止工作)
TH0 = 0xDC; //裝載定時器初值高八位(此初值表示定時器定時為10ms)
TL0 = 0x00; //裝載定時器初值低八位(此初值表示定時器定時為10ms)
EA = 1; //開啟總中斷
ET0 = 1; //開啟定時器中斷允許位
TR0 = 1; //開啟定時器中斷
//時鐘顯示
while(1)
{
data_deal();//調用數據處理函數,提取處理后的數據
display(); //調用顯示函數,顯示處理好的數據
}
}
/*********************************************************************************************************************
函數名稱:delay(uchar timer)
函數功能:延時
**********************************************************************************************************************/
void delay(uchar timer)
{
uchar i,j;
for(i=0;i<114;i++)
for(j=0;j<timer;j++)
;
}
/*********************************************************************************************************************
函數名稱:T1IN_time()
函數功能:利用定時器中斷開啟定時,并計算出1秒鐘
**********************************************************************************************************************/
void T1IN_time() interrupt 1 //(1表示中斷號,0表示外部中斷0,1表示定時器T0,2表示外部中斷1,3表示定時器T1)
{
uchar count;//申明定時器變量
TH0 = 0xDC; //裝載定時器初值高八位(此初值表示定時器定時為10ms)
TL0 = 0x00; //裝載定時器初值低八位(此初值表示定時器定時為10ms)
count ++; //定時器變量自加1
if(count == 100) //count自加100次,定時器運行100次初值的時間,即10ms *100 = 1s(1秒鐘)
{
count = 0; //count歸零,等待下一次定時
time_flag = 1; //定時器標志位為1,啟動時鐘時分秒循環程序
}
}
/*********************************************************************************************************************
函數名稱:H_M_S_circle()
函數功能:時分秒循環
*************************************************************************************/
void H_M_S_circle()
{
if(time_flag == 1)//當定時器標志位為1時,表示時間為1秒
{
time_flag = 0;//標志位歸零
second++; //秒鐘自加1
}
if(second == 60) //當秒鐘自加1到60時
{
second = 0; //秒鐘歸零
Min ++; //分鐘自加1
}
if(Min == 60) //當分鐘自加1到60時
{
Min = 0; //分鐘歸零
Hour ++; //小時自加1
}
if(Hour == 24) //當小時自加1到24時
{
Hour = 0; //小時歸零
Min = 0; //分鐘歸零
second = 0; //秒鐘歸零
}
}
/********************************************************************************
函數名稱:data_deal()
函數功能:對數碼管將要顯示的數據進行拆分
**********************************************************************************/
void data_deal()
{
H_M_S_circle(); //調用時鐘時分秒循環程序,取出時,分。秒的值
DispBuf[7] = Hour /10; //小時十位
DispBuf[6] = Hour %10; //小時個位
DispBuf[5] = 8; //顯示“-”
DispBuf[4] = Min /10; //分鐘十位
DispBuf[3] = Min %10; //分鐘個位
DispBuf[2] = 8; //顯示“-”
DispBuf[1] = second /10; //秒鐘十位
DispBuf[0] = second %10; //秒鐘個位
}
void display()
{
uchar i;
code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
for(i=0;i<8;i++)
{
P0 =com[i]; //i=0表示數碼管的最低位
P2 =table[DispBuf[i]];//DispBuf[i]表示拆分后的數據,i表示需要顯示的動態數據
delay(1);
} P0 = 0x00; //關閉所有數碼管顯示
}
/***************************************END********************************************/
復制代碼
作者:
tyrl800
時間:
2020-3-24 15:36
DispBuf[2] = 8; //顯示“-” 怎么會是顯示“-”,肯定顯示“8”
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1