久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機2408點陣時鐘電子制作
[打印本頁]
作者:
nius
時間:
2015-4-10 04:08
標題:
單片機2408點陣時鐘電子制作
本帖最后由 nius 于 2015-4-10 04:10 編輯
這是一款由單片機TC89C52RD為控制核必的2408點陣時鐘
電子制作
點陣的驅動是用單片機直驅,圖中是用STC89C52單片機,直驅三個8*8的共陽點陣屏,亮度還基本可以,白天看都很清楚!驅動能力不是很好,有條件的話用STC12C5A60S,驅動能力已經比較好,屏的亮度會比較高。白天看都很清楚!P0口需要接上1K的上拉電阻,P1-P3口分別接三個8*8屏的陰極,用去了單片機的全部32個I/O口。為了能調時間,P2口的P2.0-P2.6接屏的1-7列,P2.7口接一個按扭作于調時間,調整方法: 長按一次是進入調時狀態,短按是加1,長按二次是調分,短按是加1,長按3次回復正常狀態! 感興趣的愛好者可以動手實踐一下,體驗一下電子制作點陣時鐘的樂趣。
//單片機點陣電子鐘C語言程序
//MCU:STC89C52RD 晶振頻率:12MHZ
#include <reg52.H>
#include<stdio.h>
#define uchar unsigned char //宏定義
#define uint unsigned int
sbit KEY=P2^7; //時調整鍵
uchar keymode; //鍵狀態
uchar keydate; //鍵值,
uint keycount; //鍵延時值
unsigned char c=0; //時分調整位置變量,0不調,1時調時,2時調分
bit D7,D6; //鍵值有效,長按標志,
bit SHAN; //閃爍標志位
uchar second,minute,hour; //定義秒、分、時寄存器
//以下字模與ASCII對應是,只要將 'A'-0x20就可以得到A的字模了
//高8*5寬 ASCII碼
//采用"字模提取軟件V2.2"
//提取方式:縱向取模,字節倒序
uchar code ASCII86[10][5]=
{
{0x3E,0x41,0x49,0x41,0x3E},//0
{0x00,0x42,0x7F,0x40,0x00},//1
{0x72,0x49,0x49,0x49,0x46},//2
{0x21,0x41,0x49,0x4D,0x32},//3
{0x18,0x14,0x12,0x7F,0x10},//4
{0x27,0x45,0x45,0x45,0x38},//5
{0x3C,0x4A,0x49,0x49,0x31},//6
{0x41,0x21,0x11,0x09,0x07},//7
{0x36,0x49,0x49,0x49,0x36},//8
{0x46,0x49,0x49,0x29,0x16},//9
};
uchar code seg[24][3]=
{
{0xfe,0xff,0xff},
{0xfd,0xff,0xff},
{0xfb,0xff,0xff},
{0xf7,0xff,0xff},
{0xef,0xff,0xff},
{0xdf,0xff,0xff},
{0xbf,0xff,0xff},
{0x7f,0xff,0xff},
{0xff,0xfe,0xff},
{0xff,0xfd,0xff},
{0xff,0xfb,0xff},
{0xff,0xf7,0xff},
{0xff,0xef,0xff},
{0xff,0xdf,0xff},
{0xff,0xbf,0xff},
{0xff,0x7f,0xff},
{0xff,0xff,0xfe},
{0xff,0xff,0xfd},
{0xff,0xff,0xfb},
{0xff,0xff,0xf7},
{0xff,0xff,0xef},
{0xff,0xff,0xdf},
{0xff,0xff,0xbf},
{0xff,0xff,0x7f}
}; //P1,P3,P2掃描列選碼
uchar disbuf[]={0,0,0,0,0,0};//定義緩沖數組區
void delay(uchar t); //延時函數
void init(); //初始化函數
void display(); //顯示函數
void main()
{
init(); //調用初始化函數
P0=0xff; P1=0x00; P3=0x00; P2=0x00;
for(c=0;c<10;c++) delay(255);
P1=0xff; P3=0xff; P2=0xff; //測試點陣屏全亮3秒.
P0=0x00; P1=0x00; P3=0x00; P2=0x00;
for(c=0;c<10;c++) delay(255);
P1=0xff; P3=0xff; P2=0xff; //測試點陣屏全滅3秒.
P0=0xff; P1=0x00; P3=0x00; P2=0x00;
for(c=0;c<10;c++) delay(255);
P1=0xff; P3=0xff; P2=0xff; //測試點陣屏全亮3秒.
P0=0x00; P1=0x00; P3=0x00; P2=0x00;
for(c=0;c<10;c++) delay(255);
P1=0xff; P3=0xff; P2=0xff; //測試點陣屏全滅3秒.
c=0;
while(1) //主程序循環
{
switch(keymode) //鍵盤處理程序
{
case 0x00:
if(KEY==0) { keymode=1; keycount=2;}
break;
case 0x01:
if(keycount==0)
{ if(KEY==0)
{ keymode=2; keydate=1;D7=0;} else {keymode=0; break;}
}
else
{
keycount--;
break;}
case 0x02:
if(KEY==1)
{ keymode=0; D7=1; break;}
else
{keymode=3; keycount=50; break; }
case 0x03:
if(KEY==1)
{ keymode=0; D7=1; break;}
else
if(keycount==0)
{ keymode=4; D6=1; break; }
else
{ keycount--; break;}
case 0x04:
if(KEY==1)
{keymode=0; D7=1; break;}
else
break;
default: break;
}
//以下的鍵值調時間處理
if(D7==1)
{
if(D6==0) {
if(c==1) hour++;
if(hour==24) hour=0;
if(c==2) minute++;
if(minute==60) minute=0;
D7=0; }
else
{c++; if(c>2) c=0; D6=0; D7=0;}
}
disbuf[0]=(second);
disbuf[1]=(second/10);
disbuf[2]=(minute);
disbuf[3]=(minute/10);
disbuf[4]=(hour);
disbuf[5]=(hour/10);
display(); //調用顯示函數
}
}
void init()
{
TMOD=1;TH0=0X3C;TL0=0XB0; //定時器0模式1,50毫秒
ET0=1;TR0=1;EA=1; //開定時器0中斷、啟動定時器0、開總中斷
}
void display( )
{
unsigned char i,j=0; //j為列位置變量
for(i=0;i<5;i++) //時十位
{
if(disbuf[5]==0) P0=0x00; //時十分為0時不顯示
else P0=ASCII86[disbuf[5]];
P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
delay(1);
P1=0xff; P3=0xff; P2=0xff;
j++;
}
j++; //隔一列
for(i=0;i<5;i++) //時個位
{
if(c==1&&SHAN)P0=0x00;
else P0=ASCII86[disbuf[4]]; //調時狀態時個位閃爍
P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
delay(1);
P1=0xff; P3=0xff; P2=0xff;
j++;
}
if(!SHAN) {P0=0x81;} else P0=0x00; //秒閃
P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
delay(1);
P1=0xff; P3=0xff; P2=0xff;
j++;
for(i=0;i<5;i++) //分十位
{
P0=ASCII86[disbuf[3]];
P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
delay(1);
P1=0xff; P3=0xff; P2=0xff;
j++;
}
j++;
for(i=0;i<5;i++) //分個位
{
if(c==2&&SHAN)P0=0x00;
else P0=ASCII86[disbuf[2]]; //調分狀態時分閃爍
P1=seg[j][0]; P3=seg[j][1]; P2=seg[j][2];
delay(1);
P1=0xff; P3=0xff; P2=0xff;
j++;
}
}
void delay(uchar t)
{
uchar i; //定義變量
for(;t>0;t--) //如果t大于0,t減1(外層循環)
for(i=124;i>0;i--); //i等于124,如果i大于0,i減1
}
void timer0() interrupt 1 //定時器0(中斷1)
{
uchar tim1,tim2; //定義臨時變量
TL0=TL0+0XB0;TH0=0X3C; //重裝定時器初值
tim1++; //每中斷一次tim1加1
if(tim1==10) //中斷10(0.5秒)
{
SHAN=!SHAN; //閃爍標志取反
tim1=0;tim2++; //tim1清零,tim2加1
if(tim2==2) //到了1秒
{
tim2=0;second++; //tim2清零,秒加1
if(second>=60) //如果秒到60
{
second=0;minute++; //秒變0,分加1
if(minute>=60) //如果分到60
{
minute=0;hour++; //分變0,時加1
if(hour>=24) hour=0; //如果時到24,時變0
}
}
}
}
}
復制代碼
作者:
老農夫
時間:
2015-4-10 12:41
做得不錯,淺顯易懂。
作者:
文梃灃55
時間:
2015-4-11 23:59
做得不錯,不過就是點陣中,時間的那兩點看不是清楚
作者:
jiafjian
時間:
2017-3-11 20:42
做得不錯,不過就是點陣中,時間的那兩點看不是清楚
作者:
越快樂越墮落
時間:
2017-7-2 16:16
不錯 就是中間的冒號可以往中間靠一點,太靠邊了
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美一区永久视频免费观看
|
日韩在线免费视频
|
欧洲一级毛片
|
91精品国产91久久久久久最新
|
欧美激情一区
|
91视视频在线观看入口直接观看
|
国产在线视频在线观看
|
国产一区视频在线
|
亚洲网站在线观看
|
国产一区
|
国产成人精品免高潮在线观看
|
久久久久久毛片免费观看
|
a级片网站
|
午夜精品视频在线观看
|
毛片国产
|
黑人巨大精品欧美一区二区一视频
|
日韩网站在线观看
|
av国产精品
|
www.v888av.com
|
h视频免费在线观看
|
av在线一区二区三区
|
精品国产乱码久久久久久久久
|
日本中文字幕日韩精品免费
|
免费视频二区
|
91国产精品
|
蜜桃av一区二区三区
|
毛片黄片免费看
|
国产一区亚洲
|
国产美女久久
|
国产丝袜人妖cd露出
|
国产亚洲高清视频
|
色99视频
|
国产美女永久免费无遮挡
|
盗摄精品av一区二区三区
|
成人欧美一区二区三区黑人孕妇
|
人成在线
|
福利网址
|
中文久久
|
久热精品在线
|
国产1区2区3区
|
欧美一区精品
|