使用这个到板子里面:
#include <reg52.h>
sbit ADDR0 = P1^0
sbit ADDR1 = P1^1
sbit ADDR2 = P1^2
sbit ADDR3 = P1^3
sbit ENLED = P1^4
sbit KEY1 = P2^4
sbit KEY2 = P2^5
sbit KEY3 = P2^6
sbit KEY4 = P2^7
unsigned char code LedChar[] = { //数码管显示字符转换表0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E}
void delay()
void main(){
bit keybuf = 1//按键值暂存,临时保存按键的扫描值
bit backup = 1//按键值备份,保存前一次的扫描值
unsigned char cnt = 0//按键计数,记录按键按下的次数
ENLED = 0 //选择数码管 DS1 进行显示
ADDR3 = 1
ADDR2 = 0
ADDR1 = 0
ADDR0 = 0
P2 = 0xF7 //P2.3 置 0,即 KeyOut1 输出低电平
P0 = LedChar[cnt] //显示按键次数初值
while (1){
keybuf = KEY4 //把当前扫描值暂存
if (keybuf != backup){ //当前值与前次值不相等说明此时按键有动作
delay() //延时大约 10ms
if (keybuf == KEY4){ //判断扫描值有没有发生改变,即按键抖动
if (backup == 0){ //如果前次值为 0,则说明当前是d起动作
cnt++ //按键次数+1
//只用 1 个数码管显示,所以加到 10 就清零重新开始
if (cnt >= 10){
cnt = 0
}
P0 = LedChar[cnt]//计数值显示到数码管上
}
backup = keybuf//更新备份为当前值,以备进行下次比较
}
}
}
}
/* 软件延时函数,延时约 10ms */
void delay(){
unsigned int i = 1000
while (i--)
}
是AVRmega128控制步进机的程序//***********************************************************************
// 包含文件
//***********************************************************************
#include <string.h>
#include <stdio.h>
#define F_CPU 7372800 // 单片机主频为7.3728MHz,用于延时子程序
#include <util/delay.h>
#include <avr/io.h>
#include <avr/iom128.h>
//***********************************************************************
// 定义变量区
//***********************************************************************
#define Data_IO PORTA//液晶数据口
#define Data_DDRDDRA //数据口方向寄存器
#define D_LE0 PORTD &= ~(1 <<PD4) //数码管段控制位为0,锁存端口数据
#define D_LE1 PORTD |= (1 <<PD4) //数码管段控制位为1,锁存器输出与端口一致
#define W_LE0 PORTD &= ~(1 <<PD5) //数码管位控制位为0
#define W_LE1 PORTD |= (1 <<PD5) //数码管位控制位为1
#define delay_us(x) _delay_us(x) //AVR GCC延时函数 x(us)
#define delay_ms(x) _delay_ms(x) //AVR GCC延时函数 x(ms)
#define uchar unsigned char
#define uintunsigned int
uchar F_Rotation[8]={0xE2,0xE6,0xE4,0xEC,0xE8,0xF8,0xF0,0xF2 }//正转表格, 0111,0011 1011,1001 1101,1100 ,1110,0110
uchar B_Rotation[8]={0xF2,0xF0,0xF8,0xE8,0xEC,0xE4,0xE6,0xE2}//反转表格
//***********************************************************************
// 主程序
//***********************************************************************
int main(void)
{
uint i,j
DDRB=0xFF
PORTD=0xFF
DDRD=0xFF
D_LE1//关掉数码管,以免显示乱码
W_LE1
Data_IO=0xFF //关数码管
W_LE0
while(1)
{
for(j=0j<32*8j++) //步距角5.625/64 减速比1/64,8拍,这个循环为反转一圈
{
for(i=0i<8i++)
{
PORTB=B_Rotation[i]
delay_ms(10)
}
}
for(j=0j<64*8j++) //步距角5.625/64 减速比1/64,8拍,这个循环为正转一圈
{
for(i=0i<8i++)
{
PORTB=F_Rotation[i]
delay_ms(10)
}
}
}
}
请给邮箱~求一个C程序,当P1.0按键按下时,P1.6和P1.7两个管脚所接的LED灯轮流发光,要求延时10秒,再按下按键全灭
------》此程序流程
---->首先判断按键是否按下,即主函数循环while(1)判断是否按键按下
------>按下,则进入防抖动判断,如符合,则开始进入轮流切换状态
---->状态,初始,其中一个亮另一个灯灭。10秒过后再切换状态,其中,加入一个指令
既,判断按键是否再次按下,若按下则给两个灯低电平,退出本次轮流切换状态
------》退出后,再次进入主函数,,即主函数循环while(1)判断是否按键按下
#include<reg51.h>
unsigned char counter
sbit control_s=P1^0
sbit Led1=P1^6
sbit Led1=P1^7
//**** ********* *****
//**** 中断服务 ******
//**** ********* *****
void set_state()
{
TMOD=0x01//选择工作方式1
TH0=0x3c
TL0=0xb0
ET0=1 //打开定时器0
TR0=1 //定时器0中断模式
EA=1 //中断总控制
}
void switch_led()//换灯函数声明
//**** ********* *****
//**** 主函数 ******
//**** ********* *****
void main()
{
void set_state()//打开中断服务
while(1) //开始循环1,等待按键
{
if(control_s== 0) //当按键按下,防抖动
{
delay_time(10)//延迟
if( control_s==0) switch_led() //再次判断,符合则进入轮流发光
}
}
}
//**** ********* *****
//**** 定时器0中断服务 ******
//**** ********* *****
void timer0() interrupt 1
{
TH0=0x3c
TL0=0xb0
counter++
if(counter>19) {counter= 0s++}
}
//**** ********* *****
//**** 轮流发光函数 ******
//**** 切换间隔10s *****
void switch_led()
{
Led1=0 //让Led1暗
Led2=1 //让Led2亮
while(1) //开始循环
if(s>9) //s从0-9,10次,一次1s
{
s= 0
Led1=~Led1 //取反状态,当Led1=1时,则~Led1=0
Led2=~Led2 //同上
if( control_s==0){Led1= 0Led2= 0break} //按键再次按下,灯熄灭,退出此函数回到主函数循环1。
}
}
因为没有说明问题的过程,可以简单些,用楼上的,只不过,楼上的估计和我一样吧,弄不清这延时10秒在哪体现,干脆省了这10秒,嘿。
化雨眠 | 三级
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit a=P1^0
void delay(uint x)
{
uint i , j
for(i=xi>0i--)
for(j=110j>0j--)
}
void main()
{
while(1)
{
if(a==0)
{
delay(10)
if(a==0)
{
P1^6=0
delay(50)
P1^6=1
delay(50)
P1^7=0
delay(50)
P1^7=1
delay(50)
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)