|
//根據(jù)實驗現(xiàn)象,對每行程序的功能進行注釋!
#include <reg52.h>
sbit P27 = P2^7;// SER 串行數(shù)據(jù)輸入引腳
sbit P25 = P2^5;// RCLK 儲存寄存器時鐘
sbit P26 = P2^6; // SRCLK 輸入數(shù)據(jù)移位時鐘
void Send_595(unsigned char dat);//74hc595發(fā)送數(shù)據(jù)函數(shù)聲明
void BufToSeg();//數(shù)碼管顯示函數(shù)聲明
void NumToNuf();//數(shù)據(jù)轉換函數(shù)聲明
void Delay(unsigned int n);// 延時函數(shù)聲明
unsigned char code Segcode[]=
{0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F}; //共陰極數(shù)碼管段碼0~9
unsigned char code Bitcode[]=
{0x01,0x02};//第一和第二個共陽極數(shù)碼管位選碼
unsigned char DisBuf[2];
unsigned char Count;
/*************主程序*********************************/
void main()
{
unsigned char m; //定義一個無符號字符型變量m
while(1) //大循環(huán)
{
if(++m==220)
{
m=0;
if(++Count==60)
Count=0;
} //延時 1s
NumToNuf(); //取余取整函數(shù)
BufToSeg(); //顯示函數(shù)
}
}
/*****************************************************/
/***************595發(fā)送字節(jié)程序***********************/
void Send_595(unsigned char dat)
{
unsigned char i;
for(i=0; i<8; i++) //循環(huán)是為了將8位數(shù)據(jù)送入595中
{
if(dat & 0x80) //判斷最高位數(shù)據(jù) 是否為“1”
P27 = 1; //若為“1”,就把1通過 P26發(fā)送給74hc595
else
P27 = 0; //若為“0”,就把0通過 P26發(fā)送給74hc595
P26 = 0;
P26 = 1; //P26出現(xiàn)上升沿,單片機通過 P26向74hc595發(fā)送數(shù)據(jù)
dat = dat << 1; //左移一位
}
}
/*****************毫秒級延時子程序*****************************/
void Delay(unsigned int n)
{
unsigned char i;//定義一個無符號字符型變量i
while(n--)
{
for(i=0;i<123;i++);
}
}
/**************兩位數(shù)取整取余子程序***************************/
void NumToNuf()
{
DisBuf[0]=Count/10; //取整
DisBuf[1]=Count%10; //取余
}
/**************數(shù)碼管顯示子程序***************************/
void BufToSeg()
{
unsigned char k;
for(k=0;k<2;k++)
{
Send_595(~Bitcode[k]);//發(fā)送位選信號,取反后為共陰極數(shù)碼管,位選第一二個數(shù)碼管
Send_595(Segcode[DisBuf[k]]);//發(fā)送段選信號 ,在前兩個數(shù)碼管上顯示DisBuf[]的值
P25 = 0;
P25 = 1; // P25出現(xiàn)上升沿,
Delay(1); //延時1s
}
}
|
-
-
send595.rar
2019-5-2 09:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.12 KB, 下載次數(shù): 12, 下載積分: 黑幣 -5
|