PIC单片机C语言程序设计(6)
(3)倒计时的C 程序。
根据图7~ 图9 编写的的倒计时C 程序(命名为pic06.c)清单如下:
#includepic.h>
#define PORTAIT(add,bit)((unsigned)(add)*8+(bit))
static bit PORTA_0 @PORTAIT(PORTA,0);
//pic16F84A
static bit PORTA_1 @PORTAIT(PORTA,1);
static bit PORTA_2 @PORTAIT(PORTA,2);
//A 口的位定义
static bit PORTA_3 @PORTAIT(PORTA,3);
static bit PORTA_4 @PORTAIT(PORTA,4);
unsigned int ttr=0;
// 无符号整形变量ttr,并赋值0
unsigned char x=0,sign_a=0;
// 字符变量X,标志位并赋值0
void key_server(); // 键值服务函数
void display(unsigned int x);
// 带形参X 的显示函数
void display_set(unsigned int x);
// 带形参X 的键值显示函数
void delay_1m(); // 按键延时函数
void delay(unsigned long int k ) // 延时函数
{
unsigned long int i; // 无符号整形变量i
for(i=0;i=k;i++) // for 语句
continue; // 继续循环
}
void display(unsigned int x) // 显示函数开始
{
unsigned int d=5800,unit_bit,ten_bit,
// 整型变量d 并赋值,个、十位
unsigned char SEG7[10]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
// 引用数组字符段码
unit_bit=x%10; //picc 编译器可识别的个位
ten_bit=x/10%10; // picc 可识别的十位
while(d>0) // while 语句
{
PORTA|=0x1E; // 关显示
PORTB=SEG7[unit_bit];
// 个位字段码送B 口
RA3=0; // 显示个位
delay(200); // 延时以便观察
RA3=1; // 关个位显示
delay(2); // 延时
PORTB=SEG7[ten_bit];
// 十位字段码送B 口
RA2=0; // 显示十位
delay(200); // 延时以便观察
RA2=1; // 关十位显示
delay(2); // 延时
d--; // d 从5800 开始自减量
if( PORTA_4==0) // K1 未按下
{
while(1) // 执行while 语句
{
if( PORTA_4==1) // K1 按下,执行以下程序
{
sign_a=1;
x=0;
d=0;
RA0=0;
break; // 跳出循环
}
}
}
}
}
void main( ) // 主程序开始
{
TRISB=0x00;
// 16F84A 口初始化,B 为输入
TRISA=0x10; // A4 输入,其余输出
PORTB=0xFF;
INTCON=0x00;
PORTA=0xFF; 关显示
RA0=0; 关报警
x=0; // 给整型变量X 赋值0
评论