![]() |
發布時間: 2017-12-24 19:37
正文摘要:本帖最后由 liuziyi001 于 2017-12-26 10:02 編輯 我想做一個共陰極數碼管計時秒表,C52的單片機,左面的開關是復位,右面第一個是啟動/停止,第二個是清零 |
沖C52單片機來的,AT89C52是51單片機! |
#include "reg51.h" sbit K1=P3^0; sbit K2=P3^1; //sbit geweishumaguan=P2^6; //sbit shiwei=P2^7; unsigned char num=0; unsigned char weixuan[]={0xef,0xbf};//數碼管位選P2控制的P27、P26 unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned char diswei[]={0xef,0xef};//上電顯示0 void delay10ms(void) //誤差 0us { unsigned char a,b,c; for(c=5;c>0;c--) for(b=4;b>0;b--) for(a=248;a>0;a--); } void delay2ms(void) //誤差 0us { unsigned char a,b; for(b=133;b>0;b--) for(a=6;a>0;a--); } void InitTimer0(void) { TMOD = 0x02; //定時器0計時,方式二8位自動重裝 TH0 = 0x0D8; //100ms TL0 = 0x0F0; EA = 1; ET0 = 1; // TR0 = 1; } void keyscan() //按鍵掃描 { if(K1==0) { delay10ms(); if(K1==0) { while(!K1); TR0=1;//啟動計時器 } } if(K2==0) { delay10ms(); if(K2==0) { while(!K1); TR0=0;//停止計時器 } } } void display() { unsigned char i; diswei[0]=num/10; diswei[1]=num%10; P0=0X00; P2=0XFF; for(i=0;i<2;i++) { P0=table[diswei[1]]; P2=weixuan[i]; delay2ms(); P2|=0xff; } } void main(void) { InitTimer0(); while(1) { keyscan(); display(); } } void timeo() interrupt 1 { static unsigned char i=0; i++; if(i==10) { i=0; num++; if(num==60) { num=0; } } } |
這種設計方案留其他IO口閑置的浪費,可參http://www.zg4o1577.cn/bbs/dpj-190432-1.html |
樓主需求明確一點啊![]() |
電路圖畫出來了,按電路圖寫代碼就是,求代碼? |
沒有明白你的意思? 是你自己DIY一個共陰的數碼管? 還是其它意思? |
同求,樓主知道怎么做了嘛? |