欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
4位共陰極數碼管秒表設計仿真與程序
[打印本頁]
作者:
阿爾特
時間:
2017-12-5 15:04
標題:
4位共陰極數碼管秒表設計仿真與程序
單片機課設,數字秒表設計,計時9:59:9
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(14.82 KB, 下載次數: 116)
下載附件
2017-12-5 20:12 上傳
單片機源程序如下:
#include "reg51.h"
#include "intrins.h"
#define GPIO_DIG P2 //數據端
#define uchar unsigned char //重命名關鍵字
#define uint unsigned int //重命名關鍵字
sbit K1=P3^0; //開始
sbit K2=P3^1; //暫停
sbit K3=P3^2; //復位
sbit L1=P1^4; //數碼管1位選
sbit L2=P1^5; //數碼管2位選
sbit L3=P1^6; //數碼管3位選
sbit L4=P1^7; //數碼管4位選
sbit beep=P1^0;
unsigned char code DIG_CODE[10] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
//0、1、2、3、4、5、6、7、8、9的顯示碼
unsigned char code DIG_CODE2[10] = {
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
0xff,0xef};
//0、1、2、3、4、5、6、7、8、9帶小數點的顯示碼
unsigned char DisplayData[4];
//用來存放要顯示的8位數的值
uchar i,m; //定義變量
uchar min=0;
long int k=0;
uint Second_Counts; //定義變量
void DigDisplay() //數碼管顯示子函數
{
unsigned int j; //定義變量
L1=0; //位選
L2=1;
L3=1;
L4=1;
GPIO_DIG = DisplayData[0]; //發送段碼
j = 1000; //掃描間隔時間設定
while(j--);
L1=1; //消隱
L2=1;
L3=1;
L4=1;
L1=1;
L2=0; //位選
L3=1;
L4=1;
GPIO_DIG = DisplayData[1]; //發送段碼
j = 1000; //掃描間隔時間設定
while(j--);
L1=1; //消隱
L2=1;
L3=1;
L4=1;
L1=1;
L2=1;
L3=0; //位選
L4=1;
GPIO_DIG = DisplayData[2]; //發送段碼
j = 1000; //掃描間隔時間設定
while(j--);
L1=1; //消隱
L2=1;
L3=1;
L4=1;
L1=1;
L2=1;
L3=1;
L4=0; //位選
GPIO_DIG = DisplayData[3]; //發送段碼
j = 1000; //掃描間隔時間設定
while(j--);
L1=1; //消隱
L2=1;
L3=1;
L4=1;
}
void main()
{
// Second_Counts=570;
// min=9;
GPIO_DIG = 0x00; //初始化數據口
TMOD=0x01; //定時器0方式1
TH0=(65536-50000)/256; //定時器0:50ms
TL0=(65536-50000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
EA=1;
// ET1=1;
// TR1=1;
while (1)
{
if(K1==0)
{
ET0=1;
TR0=1; //開啟定時器
}
if(K2==0)
{
ET0=0;
TR0=0; //關閉定時器
}
if(K3==0) //復位按鍵按下時
{
ET0=0;
TR0=0; //關閉定時器
DisplayData[0] = DIG_CODE2[0]; //清零顯示
DisplayData[1] = DIG_CODE[0]; //清零顯示
DisplayData[2] = DIG_CODE2[0]; //清零顯示
DisplayData[3] = DIG_CODE[0]; //清零顯示
i=0; //清零計數
Second_Counts=0; //清零秒
}
if((Second_Counts>0)&&(m==0))
{
ET1=1;
TR1=1;
}
if((min==9)&&(Second_Counts==599))
{
ET0=0;
TR0=0; //關閉定時器
ET1=1;
TR1=1;
}
DigDisplay(); //執行數碼管顯示函數
}
}
//T0中斷函數
void DSY_Refresh() interrupt 1
{
TH0=(65536-50000)/256; //恢復定時器0初值
TL0=(65536-50000)%256;
i++;
m++;
if(m>=20)
{
m=0;
}
if(i==2) //50ms*2=0.1s轉換狀態
{
i=0;
Second_Counts++;
if(Second_Counts>=600)
{
Second_Counts=0;
min++;
}
DisplayData[0] = DIG_CODE2[min%10]; //顯示百位
DisplayData[1] = DIG_CODE[Second_Counts/100%10]; //顯示十位
DisplayData[2] = DIG_CODE2[Second_Counts/10%10]; //顯示個位
DisplayData[3] = DIG_CODE[Second_Counts%10]; //顯示小數點后一位
// if(Second_Counts==10000) Second_Counts=0; //當秒計數到1000秒又變為0
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
4位共陰極數碼管秒表hangqunli.zip
(131.85 KB, 下載次數: 416)
2017-12-5 15:02 上傳
點擊文件名下載附件
秒表
下載積分: 黑幣 -5
作者:
1515798262
時間:
2018-1-9 09:33
要用Proteus7.5才能成功
51hei.png
(12.26 KB, 下載次數: 92)
下載附件
2021-6-3 17:45 上傳
作者:
syaaaa
時間:
2019-8-17 11:10
不錯,正好有用
作者:
puresilver
時間:
2019-9-26 18:56
有用~~
作者:
龍哥哥牛逼
時間:
2019-11-10 12:04
我想問一下作者,P0口來輸出段碼可以嗎
作者:
無奈的一人
時間:
2019-11-13 11:32
我為什么用protus打不開
作者:
越獄123
時間:
2019-11-13 14:33
很厲害呀
作者:
@初學者
時間:
2020-1-6 18:12
卑微的我,想知道共陽極的加上能夠記錄歷史數據的,大佬能不能幫幫我
作者:
pangshe
時間:
2020-1-7 15:57
樓主真厲害,思路奇特,程序優美,電路簡潔。
作者:
rtgvb
時間:
2020-4-16 11:55
算法簡單易懂,很不錯
作者:
LHL45969817
時間:
2020-5-25 20:48
很厲害棒棒的
作者:
楊富
時間:
2020-6-14 15:20
為什么我的運行出來不對呀
作者:
1238881
時間:
2020-12-2 23:12
牛逼很不錯,太好用了
作者:
ak333
時間:
2020-12-15 09:42
學習了,謝謝分享,很詳細的程序
作者:
chjchj816
時間:
2021-1-7 08:42
代碼寫得規范哦 參考參考
作者:
筱豆先生
時間:
2022-6-3 10:46
程序重新編譯,仿真無法運行,程序是有問題的
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1