四位数码管秒表 c语言编程,4位共阴极数码管秒表设计仿真与程序
#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黑下載附件…………
總結
以上是生活随笔為你收集整理的四位数码管秒表 c语言编程,4位共阴极数码管秒表设计仿真与程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows10下用cmd操作
- 下一篇: 3种团队分组适应项目_业务团队怎样做目标