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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6832|回復: 3
打印 上一主題 下一主題
收起左側(cè)

tm1629 驅(qū)動

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:108151 發(fā)表于 2016-3-10 08:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#include<intrins.h>
#define nop _nop_();
#define uchar unsigned char
#define uint unsigned int sbit stb =P1^0;//定義片選通訊口
sbit clk =P1^1;//定義時鐘通訊口
sbit dio =P1^2;//定義數(shù)據(jù)輸入/輸出通訊口bdata uchar y=0;//定義可以位尋址全局變量ysbity7 =y^7;
uchar show[16] = {0x76,0x7b,0x38,0x38,0x3f,0x40,0x40,0x40,0x40,0x40};//初始化顯示“HELLO”字符代碼
uchar CODE[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9顯示代碼ucharTIME_seconds,seconds_2,sub_1,sub_2,shi_1,shi_2; //時間寄存器,依次從秒個位至小時十位
uchar TIME_count; //定時中斷控制制位uchar T_count;   //時鐘小數(shù)點閃
uchar count4;   //保存按鍵控制對應(yīng)的數(shù)碼管閃uchar key_FLAG1;//按鍵標志位
uchar key_COUNT1;//按鍵移動數(shù)動顯示數(shù)據(jù)uchar key_LED=0;  //按鍵單獨顯示賦值寄存器uchar count7;
/*********************************   功能: TM1629寫數(shù)據(jù)
**********************************/
void write(uchar wr_data){
     uchari;
  stb=0;   //給有效的片選信號(片選信號是低電平有效)
nop;  
nop;  
for(i=0;i<8;i++)//開始傳送8位數(shù)據(jù),每循環(huán)一次傳送一位數(shù)據(jù)
{
     clk=0;  
nop;  
nop;
     wr_data>>= 1;//移位數(shù)據(jù),低位在前!
     nop;
     dio =CY;
     nop;
     nop;
     clk =1;
     nop;
   }
}
/*********************************  
功能:讀按鍵子程序 由y 返回1BIT按鍵數(shù)據(jù)**********************************/
unsigned char read(){
  uchar d;
   stb =0;  //給有效的片選信號(片選信號是低電平有效)
   dio =1;  //將DIO置高,因為沒有按鍵按下時,鍵值默認為00H,此時為了與鍵值有區(qū)別  for(d=0;d<8;d++)   {
     clk =0;
nop;  if(dio==1)     {
     y7 = 1;
}  else    {
y7 = 0;
}
clk = 1;
if(d!=7){y=(y>>1);}   
nop;
nop;
}
return(y);  
}   /*********************************   TM1629控制指令
功能: 驅(qū)動LED屏做相應(yīng)的顯示
**********************************/
void xianshi(uchar show_led[16]){
  ucharh;  stb = 1;  clk = 1; dio = 1;
write(0x40);//寫數(shù)據(jù)到顯示寄存器,采用地址自動加一 stb = 1;
write(0xc0);//顯示寄存器的00H單元開始 for(h=0;h<16;h++)  {   
  write(show_led[h]);//給顯示寄存器送數(shù)據(jù),  }
   stb=1;
  write(0x8b);//顯示控制參數(shù),點亮數(shù)碼屏幕,亮度可以通過改變低三位調(diào)節(jié)   stb = 1;
}
//-------讀按鍵以及相應(yīng)的顯示處理-------void panjian(){
   ucharcount3,key[4];   stb = 1;
  write(0x42);//送讀按鍵命令(42H),  for(count3=0;count3<5;count3++)  {
     key[count3]=read();//讀4BIT按鍵數(shù)據(jù),  }
  if((key_FLAG1 != 0x02))   {
  if((key[0]==0x01)){key_LED= 0;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K3與SEG1按鍵按下,數(shù)碼管顯示數(shù)字0
  if((key[0]==0x02)){key_LED= 1;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K2與SEG1按鍵按下,數(shù)碼管顯示數(shù)字1
  if((key[0]==0x04)){key_LED= 2;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K1與SEG2按鍵按下,數(shù)碼管顯示數(shù)字2。
  if((key[0]==0x08)){key_LED= 3;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K0與SEG2按鍵按下,數(shù)碼管顯示數(shù)字3。
  if((key[0]==0x80)){key_LED= 4;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K0與SEG3按鍵按下,數(shù)碼管顯示數(shù)字4。
  if((key[0]==0x40)){key_LED= 5;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K1與SEG3按鍵按下,數(shù)碼管顯示數(shù)字5。
  if((key[0]==0x20)){key_LED= 6;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K2與SEG4按鍵按下,數(shù)碼管顯示數(shù)字6。
   if((key[0]==0x10)){key_LED=7;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K3與SEG4按鍵按下,數(shù)碼管顯示數(shù)字7。
  if((key[1]==0x01)){key_LED= 8;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K3與SEG5按鍵按下,數(shù)碼管顯示數(shù)字8。
  if((key[1]==0x02)){key_LED= 9;key_FLAG1 =
0x01;show[key_COUNT1] = CODE[key_LED];} //K2與SEG5按鍵按
下,數(shù)碼管顯示數(shù)字9
}  if((key[1]==0x04)){key_FLAG1= 0x00; count7 = 0;}             //K1與SEG6按鍵按下,key_FLAG1 = 0x00啟動定時器,時間開始。
  if((key[1]==0x08)){count7 = 0x01;TR0 = 0;key_FLAG1 = 0x02;} //當K0與SEG6按鍵按下,key_FLAG1= 0x02單獨顯示數(shù)字按鍵無效!  暫停。
  if((key[1]==0x80))                                         // K0與SEG7按鍵按下,key_FLAG1= 0x00啟動定時器,時間開始。   {
    key_FLAG1 = 0x00;
count7 = 0;
shi_2 = 0;
shi_1 = 0;
sub_2 = 0;
sub_1 = 0;
seconds_2 =0;
TIME_seconds = 0;
}     if((key[1] == 0x40))   // K1與SEG7按鍵按下,控制數(shù)碼管右移一位    {
    show[key_COUNT1] = count4;
    key_FLAG1 = 0x01;//key_FLAG1 = 0x00關(guān)閉定時器,時間暫停。
         key_COUNT1 ++;
  
if((key_COUNT1 == 10)){ key_COUNT1 = 0;}   }      if((key[1] == 0x20))   // K2與SEG7按鍵按下,控制數(shù)碼管左移一位    {show[key_COUNT1] = count4;
    key_FLAG1 = 0x01;//key_FLAG1 = 0x00關(guān)閉定時器,時間暫停。
  
if((key_COUNT1==0)){ key_COUNT1 = 10;}          key_COUNT1 -= 1;
}    if((key_FLAG1 == 0x01)){ count4 =show[key_COUNT1];}//保存當前按鍵位顯示數(shù)據(jù)
  if((count7 != 0x01)){ key_FLAG1 = 0;}   }
/**********************************     定時中斷函數(shù)入口功能: 每50MS中斷一次
**********************************/  void time0(void) interrupt 1 using 2{
TH0=0x3c;  TL0=0xb0;
  TIME_count++;  if(TIME_count==21)  {
   TIME_count = 0;
    TIME_seconds++;// 秒寄存器加1
T_count ^= 0x80;  }}
/*********************************     時鐘函數(shù)
功能: 處理時鐘顯示
**********************************/voidTIME_show(){
  //sub_1 =sub_1|0x80;  //shi_1 = shi_1|0x80;
  show[15] =CODE[TIME_seconds];// 數(shù)碼屏上最后一個“8”字,依次下去
  show[14] =CODE[seconds_2];   //數(shù)碼屏倒數(shù)第二個“8”字,show[13] = CODE[sub_1]|T_count;  show[12] = CODE[sub_2];
  show[11] =CODE[shi_1]|T_count;  show[10] =CODE[shi_2];   if(TIME_seconds ==10)  //對時間數(shù)據(jù)進行處理,以免溢出。   {
    TIME_seconds = 0;
seconds_2+=1;
} if(seconds_2 == 6)   {
    seconds_2 = 0;
sub_1 +=1;
}  if(sub_1== 10)   {
     sub_1 =0;
sub_2 +=1;
}      if(sub_2 == 6)        {
     sub_2 =0;
shi_1+=1;    }
  if(shi_1== 10)   {
     shi_1 =0;
shi_2 +=1;
}   if(shi_2== 6)  //時鐘每60小時自動清0   {
     shi_2 =0;
shi_1 = 0;
sub_2 = 0;
sub_1 = 0;
seconds_2 = 0;
TIME_seconds = 0;
}}      
/*********************************    延時函數(shù)功能: 1ms延時
**********************************/voiddelay_ms(uchar cyc){
//當將=1的時候,延時1ms
uchar ii,jj;
for(jj=1;jj<=cyc;jj++)
{  
for(ii=0;ii<200;ii++)  
{   
nop;  
}
} }
/*********************************    主函數(shù)
**********************************/void main(){
ucharcount6;//按鍵按下時,所控制的位閃! P0=0xff; P1=0xff; P2=0xff;
P3=0xff;//初始化單片機I/O口TMOD=0x01;  //定時器設(shè)置 TH0=0x3c; TL0=0xb0;IE=0x82; TF0=1;
xianshi(show);//初始化顯示“HELLO”字符 _delay_ms(230);
_delay_ms(230);
_delay_ms(230);   
_delay_ms(230);  
_delay_ms(230);    //
共延時
1s
count4 =show[key_COUNT1];
while(1)//
循環(huán)
{
  count6+=1;
if((count6%2))
  {
   show[key_COUNT1] = count4;//
基數(shù)時,顯示當位數(shù)
   }
  else
   {
    show[key_COUNT1] =0;
  //
偶數(shù)時,滅當位數(shù)
!
  
程序循環(huán)
2
次,閃一次。
  
}
if(key_FLAG1 == 0x02){ TR0 = 0;}
if(key_FLAG1 == 0x00){ TR0 = 1;}
stb = 1;
dio = 1;
clk = 1;
TIME_show();  //
控制做時鐘顯示
panjian();    //
判斷按鍵值
xianshi(show); //
根據(jù)按鍵值,給顯示寄存器送相應(yīng)的顯示數(shù)據(jù)
_delay_ms(230);//
延時
240ms!
if(count6== 201){ count6 = 0;}
}
}

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2016-3-10 17:56 | 只看該作者
有電路圖嗎?
回復

使用道具 舉報

板凳
ID:155290 發(fā)表于 2019-1-10 23:57 | 只看該作者
謝謝謝謝
回復

使用道具 舉報

地板
ID:457927 發(fā)表于 2019-2-13 23:33 | 只看該作者
學習學習了。
回復

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩午夜场 | 夜夜精品浪潮av一区二区三区 | 日本中文字幕在线观看 | 久草视| 黄色在线观看国产 | 伊人在线视频 | 成人免费一区二区三区视频网站 | 国产欧美精品一区二区三区 | 国产一区 在线视频 | 在线视频日韩 | 五月综合激情网 | 毛片国产 | 古装三级在线播放 | 91精品91久久久 | 日本高清不卡视频 | 99久久久99久久国产片鸭王 | av在线播放网 | www.久久久久久久久 | 日韩福利| 亚洲成人综合社区 | 亚洲天堂久久 | 蜜桃精品噜噜噜成人av | 天天av网| 精品国产乱码久久久久久丨区2区 | 国产精品亚洲欧美日韩一区在线 | 亚洲精品久久久一区二区三区 | 久久久精品 | 欧美不卡一区二区 | 色小姐综合网 | 蜜桃视频成人 | 日日摸日日碰夜夜爽2015电影 | 黄色一级电影免费观看 | 性色综合 | 欧美日韩一卡二卡 | 三级av在线| 国产精品视频一二三区 | 亚洲精品在线观 | 国产久视频 | 噜噜噜噜狠狠狠7777视频 | 亚洲视频三 | 国产高清久久久 |