51单片机主c语言程序,求高手教教!1!
程序流程图是这个,怎么写C语言程序啊?? 好的话可以加分
追问:不需要数码管显示,只是执行对应的子程序 是不是把数码管显示那里去掉就行了? 还有去抖动延时是25ms?
答案:下面的程序是我这里的板子的按键扫描程序。你可以参考下。
#include"at89x52.h"
#define uchar unsigned char
//键盘扫描码
//键值 0 1 2 3 4 5 6 7
const uchar keyboard[16] =
{
0x7e,
0xbe,
0xde,
0xee,
0x7d,
0xbd,
0xdd,
0xed,
//键值 8 9 a b c d e f
0x7b,
0xbb,
0xdb,
0xeb,
0x77,
0xb7,
0xd7,
0xe7
};
//显字符示数码 0 1 2 3 4 5 6 7
const uchar number[16] =
{
0x3f,
0x06,
0x5b,
0x4f,
0x66,
0x6d,
0x7d,
0x07,
// 8 9 a b c d e f
0x7f,
0x6f,
0x77,
0x7c,
0x39,
0x5e,
0x79,
0x71
};
uchar count= 0x00;
uchar temp;
void print(uchar scankey);
uchar Scan(); //逐列扫描
/******************************************************************************
名称:timer0_over
功能:定时器/计数器 0 溢出中断服务程序,每 0.025s 显示一次扫描的按键;每 0.5 秒扫描键盘
一次
参数:无
******************************************************************************/
void timer0_over(void) interrupt 1
{
count++; //计数一次
if (count == 0x14)
{
count = 0x00;
temp = Scan(); //列扫描
}
if (temp != 0xff)//如果有键按下
{
print(temp); //输出该字符
}
TH0 = 0x3c; //设置定时器 0 初始值
TL0 = 0xaf; //为 0x3caf
}
/******************************************************************************
名称:Scan()
功能:逐列扫描键盘,有键按下返回扫描码,无键按下返回 0xff
返回值:0xff,或键盘扫描码
******************************************************************************/
uchar Scan(void)
{
ucharscantemp, m;
static uchar n = 0x00;
P2 = 0xff ^ (0x01 << n); //逐次对每列输出低电平
scantemp = P2; //读取 P2
if (scantemp < 0xf0)//有键按下
{
for (m = 0x00; m < 0x10; m++)
{
if (scantemp == keyboard[m]) //找到对应的键盘?
{
return m; //有键按下,返回键值
}
}
}
n++; //扫描下一列
if (n == 0x04)
{
n = 0x00;
}
return 0xff; //无键按下,返回 0xff
}
/******************************************************************************
名称:device_init(void)
功能:初始化端口、状态寄存器
参数:无
******************************************************************************/
void device_init(void)
{
TH0 = 0x3c; //设置定时器 0 初始值为 0x3caf
TL0 = 0xaf; //即每次定时 50000*0.5um=0.025s
TMOD = 0x01; //设置定时器 0 的工作方式为 1
TCON = 0x10; //定时器 0 工作
IE = 0x82; //打开全局中断和定时器 0 溢出中断
}
/******************************************************************************
名称:print(uchar scankey)
功能:将一个键值显示到数码管上
参数:scankey,表示要显示的键值
******************************************************************************/
void print(uchar scankey)
{
P1 = 0xdf; //在第一个数码管上
P0 = number[scankey]; //显示出该键值
}
void main()
{
device_init(); //调用初始化函数
while (1) //等待中断
{
}
}
点击Project菜单,选择弹出的下拉式菜单中的New Project,
QQ:349836971
上一个:C语言J++和++J又什么区别?
下一个:c 语言 写个超市管理系统。。简单的功能