久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2190|回復: 2
打印 上一主題 下一主題
收起左側

剛轉單片機,用hc6800esv2.0做了一個軟件時鐘

[復制鏈接]
跳轉到指定樓層
樓主
ID:300170 發表于 2018-7-6 03:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  #include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit a1=P2^2;
sbit a2=P2^3;
sbit a3=P2^4;//38譯碼管接口
sbit beep=P1^5;//蜂鳴器口
uchar num1,num2,num4,num5,num7,num8,tt,temp;
uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
212,212,106,126,159,169,190,119,119,126,159,142,159,0};//SONG_TONE 延時表決定了每個音符的頻率
uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,
9,3,12,12,12,12,12,9,3,12,12,12,24,0}; //播放各個音符,SONG_LONG 為拍子長度

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};

void delay(uint z) //延時函數
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void DelayMStime(uint x)//蜂鳴器音樂延時函數
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
void timer0() interrupt 1 //中斷函數
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
void PlayMusic()//蜂鳴器音樂生日快樂
{
uint i=0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
{ //播放各個音符,SONG_LONG 為拍子長度
    for(j=0;j<SONG_LONG[i]*20;j++)
{
    beep=~beep;
//SONG_TONE 延時表決定了每個音符的頻率
    for(k=0;k<SONG_TONE[i]/3;k++);
}
    DelayMStime(10);
    i++;
}
}
void keyscan()//鍵盤掃描函數
     {  
     P1=0xfe;//掃描第一行列值
   temp=P1;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
    delay(10);
  temp=P1;
   switch(temp)
   {
   case 0xee : PlayMusic();
               break;
   case 0xde : num1++;//第一位數碼管時間+1,后面類推
      if(num1==3)
      {num1=0;}
               break;
   case 0xbe : num2++;
               if(num1==2)
      {if(num2==4)
      {num2=0;}
      else if(num2==10)
      {num2=0;}}
               break;
   case 0x7e : num2--;
               if(num1==2)
      {if(num2==0)
      {num2=3;}
      else if(num2==0)
      {num2=9;}}
               break;
   }
   while(temp!=0xf0)//檢測按鍵是否按下
   { temp=P1;temp=temp&0xf0;}
  }
  P1=0xfd;//掃描第二行列值
   temp=P1;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
    delay(10);
   temp=P1;
   switch(temp)
   {
   case 0xed : num4++;
               if(num4==6)
      {num4=0;}
               break;
   case 0xdd : num4--;
               if(num4==0)
       {num4=5;}
               break;
   case 0xbd : num5++;
               if(num5==10)
        {num5=0;}
               break;
   case 0x7d : num5--;
               if(num5==0)
         {num5=9;}
               break;
   }
   while(temp!=0xf0)//檢測按鍵是否按下
   { temp=P1;temp=temp&0xf0;}
  }
  P1=0xfb;//掃描第三行列值
   temp=P1;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
    delay(10);
   temp=P1;
   switch(temp)
   {
   case 0xeb : num7++;
               if(num7==6)
      {num7=0;}
               break;
   case 0xdb : num7--;
               if(num7==0)
      {num7=5;}
               break;
   case 0xbb : num8++;
               if(num8==10)
      {num8=0;}
               break;
   case 0x7b : num8--;
               if(num8==0)
      {num8=9;}
               break;
   }
    while(temp!=0xf0)//檢測按鍵是否按下
   { temp=P1;temp=temp&0xf0;}
  }
     P1=0xf7;//掃描第四行列值
   temp=P1;
  temp=temp&0xf0;
  while(temp!=0xf0)
  {
    delay(10);
   temp=P1;
   switch(temp)
   {
   case 0xe7 : num2=0;
               break;
   case 0xd7 : num4=0;
               break;
   case 0xb7 : num5=0;
               break;
   case 0x77 : num7=0;num8=0;
               break;
   }
   while(temp!=0xf0) //檢測按鍵是否按下
   { temp=P1;temp=temp&0xf0;}  
   }
   }
void buzzer()//蜂鳴器12點響一下
  {
  if(num1==1)
  {
  if(num2==2)
  {
  if(num8==0)
  {
   beep=~beep;
   delay(3);
   }
   }
   }
  }
void timer()  //時鐘,38譯碼管軟件定時一位一位操作顯示效果比較好
{
a1=1;
a2=1;
a3=1;//第1位數碼管
if(num1==3)
{
num1=0;
}
keyscan();
P0=table[num1];
delay(3);
a1=0;
a2=1;
a3=1;//2
if(num1==2)
{
if(num2==4)
{
num1++;
num2=0;
  }
}
else if(num2==10)
{
num1++;
num2=0;
}
P0=table[num2];
delay(3);
a1=1;
a2=0;
a3=1;//3
P0=0x40;
delay(3);
a1=0;
a2=0;
a3=1;//4
if(num4==6)
{
num2++;
num4=0;
}
P0=table[num4];
delay(3);
a1=1;
a2=1;
a3=0;//5
if(num5==10)
{
num4++;
num5=0;
}
P0=table[num5];
delay(3);
a1=0;
a2=1;
a3=0;
P0=0x40;
delay(3);
a1=1;
a2=0;
a3=0;
if(num7==6)
{
num5++;
num7=0;
}
P0=table[num7]; //7
delay(3);
if(tt==20) //間隔正1秒
{
a1=0;
a2=0;
a3=0; //第8個數碼管
tt=0;
num8++;
  if(num8==10)
{
num7++;
num8=0;
}
P0=table[num8];
}
delay(3); //延時數字3最為穩定
}
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//開總中斷
ET0=1;//開定時器中斷
TR0=1;//啟動定時器0
P0=0x3f;
while(1)
{
timer();
buzzer();
}
}


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:366041 發表于 2018-7-6 08:57 | 只看該作者
很棒,加油,樓主
回復

使用道具 舉報

板凳
ID:300170 發表于 2018-7-6 17:00 | 只看該作者
修改按鍵下的 (          num數字--;  if(num數字==-1)           )數碼管數字減就不會出現亂碼了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久精品综合 | 久久久久久久91 | 久久aⅴ乱码一区二区三区 91综合网 | 精品亚洲一区二区 | 成人一级片在线观看 | 日韩免费网站 | 欧洲精品一区 | 日韩在线中文字幕 | 亚洲成人午夜电影 | 在线免费激情视频 | 成人在线免费观看视频 | 欧美人妇做爰xxxⅹ性高电影 | 黄网站免费在线看 | 欧美极品在线视频 | 欧美综合一区二区 | 日本久久精品视频 | 久久三区 | 日本精品视频 | 国精久久 | 精品国产一区二区三区在线观看 | av毛片在线播放 | 一区二区在线看 | 韩日一区二区三区 | 91精品亚洲 | 精品国产第一区二区三区 | 日韩精品一区二区三区中文在线 | 亚洲欧洲中文日韩 | 国产成人精品久久 | 亚洲啪啪 | 欧美日一区二区 | jav成人av免费播放 | 国产精品久久 | 草草视频在线免费观看 | 国产精品久久久久久吹潮 | 一级美国黄色片 | 少妇精品久久久久久久久久 | 操一草| 午夜精品久久久久久久久久久久 | 一区二区三区四区免费在线观看 | 国产一级视频在线观看 | 欧美一级二级三级视频 |