//想做个15路输出的彩灯,使用P0.0~P0.7和P2.0~P2.6端口输出;预置数为15个1(10进制32767)。
//设置+1(P3.3)和-1(P3.4)两个按钮。
//可以减到十进制32047,到32047后如果继续按-1按钮,可以回到32767重新进行减法。
//加法也一样,加到32767后,再按+1按钮可以到32047重新+1.
//再设置一个按钮(P2.7),当P2.7接地时,在当前显示的数字上减去十进制数1712进行显示。
//求单片机彩灯程序。
最佳答案:
//============================
#include
sbit K_1 = P3^3; //+
sbit K_2 = P3^4; //-
sbit D_1 = P2^7; //显示方式选择
//----------------------------
void delay_ms(unsigned int n)
{
unsigned char j;
while(n--) for(j = 0; j < 230; j++); //230是实验测试所得!
}
void main()
{
unsigned int m;
m = 32767;
while(1) {
if (D_1 == 1) {
P2 = ~(m / 256);
P0 = ~(m % 256);
}
else {
P2 = ~((m - 1712) / 256);
P0 = ~((m - 1712) % 256);
}
if (K_1 == 0) {
delay_ms(10);
if (K_1 == 0) {
m++;
if (m > 32767) m = 32047;
while(K_1 == 0);
} }
if (K_2 == 0) {
delay_ms(10);
if (K_2 == 0) {
m--;
if (m < 32047) m = 32767;
while(K_2 == 0);
} } }
}
//============================
本程序用PROTEUS仿真画面如下:
上一篇:关于单片机测量信号频率的精度问题
下一篇:单片机按键按下的先后顺序判断