本帖最后由 yettt365 于 2013-2-8 19:39 编辑
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit k1 = P3^1;
- sbit k2 = P3^2;
- uchar num1 = 0;
- uchar num2 = 0;
- uchar number = 0;
- uchar key_val = 0;
- uchar code table[] ={
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0xff,0xc0,
- 0xbf,0x7f,
- };
- /**************延时函数↓***********************/
- void delay_ms(uint z)
- {
- uint x, y ;
- for(x = z; x > 0; x --)
- for(y = 125; y > 0; y --);
- }
- /**************延时函数↑***********************/
- /**************数码管消抖显示函数↓*************/
- void xs(uchar number)
- {
- uchar zheng = 13;
- uchar fu = 12;
- uchar beiwei = number/100;
- uchar shiwei = number/10%10;
- uchar gewei = number%10;
- if(number >= 0)
- {P2 = 0x01; P0 = table[zheng];delay_ms(2);}
- else if(number < 0 )
- {P2 = 0x01; P0 = table[fu]; delay_ms(2);}
- P2 = 0X02;
- P0 = table[beiwei];
- delay_ms(2);
- P2 = 0X04;
- P0 = table[shiwei];
- delay_ms(2);
- P2 = 0x08;
- P0 = table[gewei ];
- delay_ms(2);
- delay_ms(2);
- }
- /**************数码管消抖显示函数↑*************/
- /**************主函数↓主按键判断***************/
- void main(void)
- {
- P0 = 0XFF; // 端口置零
- P1 = 0XFF;
- P2 = 0XFF;
- P3 = 0XFF;
- key_val = P3;
- while(1)
- {
- if(key_val != P3)
- {
- key_val = P3;
- xs(number);
- /******按键加数部分↓******/
- while(k1 == 0&&k2 == 1)
- {
- xs(number);//延时消抖
- if(++num1 > 100) //按键时间>1s,num=101;<1s,num=num;
- num1 = 101;
- }
- if(num1 > 0&&num1 <= 100)
- number ++;
- else if(num1 > 100)
- number += 10;
- /******按键加数部分↑******/
- /******按键减数部分↓******/
- while(k2 == 0&& k1 == 1)
- {
- xs(number);//延时消抖
- if(++num2 > 100) //按键时间>1s,num=101;<1s,num=num;
- num2 = 101;
- }
- if(num2 > 0&&num2 <= 100)
- number --;
- else if(num2 > 100)
- number -= 10;
- /******按键减数部分↑******/
- }
- num1 = 0; num2 = 0;
- xs(number);
-
复制代码程序目的:
此程序实现按k1键,小于1s,加1,大于1s,加10; 按k2键,小于1s,减1,大于1s,减10;
目前已经可以实现此功能。
问题来了:
不知道是不是当初c语言没学好,在c语言中一个数是否没有负数?0减1后是256;(TH0 = (65536-50000)/256; 也是256?)
程序中xs()中有一步是判断number是否小于0:小于,第一个数码管显示“—”;大于,显示“。”
但,
number似乎永远是>=06901028120272
;
我想应该是c语言基础没学好, 请指点一下具体那部分内容。谢谢
-
proteus电路图
改成 int ,char ,lomg 都不行,0--后,直接256,if(number<0),没效果。
number应该是有符号的
一周热门 更多>