我這個程序功能很簡單:通過tx-1c實驗班的第一個矩陣鍵盤按鍵開始計時
1、燒寫在板子上按鍵下去可以計時,但是數碼管只有當個位數變動時,十位數的顯示就閃一下,
就是說個位數的數字顯示正常,但是十位數的數字一秒閃一次,想請教一下是什么問題?
2、我想讓按鍵能實現開始和暫停的功能,請問我應該怎么改?
3、還有想問一個小知識點,keil中的bit關鍵字定義的變量如果沒有初始化,那么這個變量初始值是1還是0呢?
剛開始學單片機,很多東西不是很懂,希望各位大佬能幫我解答一下,如果我的代碼寫得不好也希望能給我一些小建議吧,謝謝了。
單片機源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f}; //數碼管段選信息
- uchar single, tenth;
- uchar flag;
- sbit dula=P2^6;
- sbit wela=P2^7;
- uint num=1;
- void delay(uchar ms)
- {
- uchar i,j;
- for(i=ms;i>0;i--)
- for(j=110;j>0;j--) ;
- }
- void display(uchar tenth, uchar single) //數碼管顯示函數
- {
- dula=1;
- P0=led[tenth];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xfe;
- wela=0;
- delay(5);
- dula=1;
- P0=led[single];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xfd;
- wela=0;
- delay(5);
- }
- void keyscan() //鍵盤檢測
- {
- uchar temp;
- P3=0xfe;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xee: flag=1;
- break;
-
- }
-
- while(temp!=0xf0)
- {
- temp=P3;
- temp=0xf0;
- }
- }
- }
- }
- void main()
- {
- single=0;
- tenth=0;
- display(tenth,single);
- TMOD=0x02; //利用定時器0方式2計數
- TL0=6; //方式2為初值自動重裝的8位定時器
- TH0=6;
- keyscan(); //檢測按鍵是否被按下
- EA=1;
- ET0=1;
- TR0=1;
- while(flag) //當檢測按鍵被按下開始計時
- {
- if(num==3686) //中斷3686次相當于1s
- {
- num=1;
- single++;
- if(single==10)
- {
- single=0;
- tenth++;
- }
- display(tenth,single);
- }
-
- }
- }
- void T0_time() interrupt 1 //中斷函數
- {
- num++;
- }
復制代碼
|